1. 二维数组和指针的关系
int a[2][3] = {1, 2, 3 ,4, 5, 6};
printf("&a[0][0]:%p\n", &a[0][0]); --打印地址;
printf("a[0]:%p\n", a[0]); ---相当于*(a+0);
二维数组的数组名是指向第一行所有元素的一个数组指针;
2. 二维数组元素的访问:
int (*q)[3] = NULL;
让p指向a[0][0]:
p = &a[0][0];
p = a[0];
p = *a
访问第m行第n列的元素:
1. a[m][n];
2. * (a[m]+n) ----- a[m][n]的值;
3. * (*(a+m)+n) ---- a[m][n]的值;
4. * (p+m*N+n)
5. * (*(q+m)+n)
6. * (q[m]+n)
7. q[m][n]
3. 二维数组传参:
二维数组传递数组指针和长度;
char str[5][32] = {0};
int fun(char (*pstr)[32], int len)
4. 指针数组传参:
int fun(char **parray, int len)
5. 指针函数和函数指针
1. 指针函数:
指针函数是函数,只不过返回值是一个指针;
注意:不能返回局部变量的地址;
2. 函数指针:
函数指针是指针,指针指向一个函数
int (*fun)(void)