文章目錄
- 1.指針數組和數組指針
- 1.int *p1[10];
- 2.int (*p2)[10];
- 2.函數指針
- char *(*fun1)(char * p1,char *p2)
- 函數指針的概念
- 函數指針的作用:
- 例子1 .調用方式
- 例子2:(帶注釋)
- 例子3
- 3.做題的小技巧
1.指針數組和數組指針
1.int *p1[10];
int *p1[10];
指針數組:存儲指針的數組(數組的元素都是指針,數組所占字節
由數組本身決定)
2.int (*p2)[10];
int (*p2)[10];
詳解
int (*) [10]`(指針類型)
p2` (指針變量)
數組指針:指向數組的指針(32位系統下永遠是4個字節,他指向
的數組占字節數未知)
注:()>[]>*
運算優先級速查鏈接
https://blog.csdn.net/csdn_kou/article/details/80139099
2.函數指針
char *(*fun1)(char * p1,char *p2)
函數指針的概念
char *(*fun1)(char * p1,char *p2)
詳解
char *(*)(char * p1,char *p2)(指針類型)
fun1(指針變量)
函數指針的作用:
例子1 .調用方式
char * fun(char *p1, char *p2)
{}
int main()
{char *(*p)(char * p1, char *p2);p = &fun;(*p)("aa", "nn");system("pause");return 0;
}
上面的例子我們還無法看出他的優勢。
函數指針數組
例子2:(帶注釋)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>/*四種算法*/
int Add(int x, int y)
{return x + y;
}
int Sub(int x, int y)
{return x - y;
}
int Mul(int x, int y)
{return x * y;
}
int Div(int x, int y)
{return x / y;
}void calc(int(*p)(int, int))
{//calc(int Add(int ,int )int ret = 0;int x = 0;int y = 0;printf("請輸入兩個操作數:>");scanf("%d%d", &x, &y);ret = p(x, y);// Add(x,y);printf("ret = %d\n", ret);
}int main()
{int (*p[5])(int, int) = {0, Add, Sub, Mul, Div};//指針變量p[5],內部5個元素,加減乘除int input = 0;do{scanf("%d", &input);if(input>=1 && input<=4)calc(p[input]);//calc(Add);//Add 指針類型是 int (*)(int ,int )elseprintf("退出\n");} while (input);
}
例子3
#include <stdio.h>#define GET_MAX 0
#define GET_MIN 1int get_max(int i, int j)
{return i > j ? i : j;
}int get_min(int i, int j)
{return i > j ? j : i;
}int compare(int i, int j, int flag)//1
{int ret;//這里定義了一個函數指針,就可以根據傳入的flag,靈活地決定其是指向求大數或求小數的函數//便于方便靈活地調用各類函數int(*p)(int, int);//2if (flag == GET_MAX)//3p = get_max;elsep = get_min;ret = p(i, j);//4return ret;
}int main()
{int i = 5, j = 10, ret;ret = compare(i, j, GET_MAX);printf("The MAX is %d\n", ret);ret = compare(i, j, GET_MIN);printf("The MIN is %d\n", ret);return 0;
}
3.做題的小技巧
- 畫圖
- 數組在內存中是連續存放,不是矩陣形式
- 在32位系統下,不管什么類型的指針,永遠只占四個字節
- 二維數組的內存分布a[i][j] = * (*(a+i)+j)
- 函數本身沒有類型,函數的返回值才有類型。
后續再補充