定义一个arr[3][4]的数组;
则:
arr是指向arr[0]这个数组(arr是二级指针,存放arr[0]这个指针的地址)
arr+1是指向arr[1]这个数组
*arr是第0行数组的首地址,等同于arr[0]
*(arr+1)是第一行的首地址
*(arr+1)+2是第一行第二个元素的地址
第i行第j个元素的地址:
arr[i]+j或者*(arr+i)+j
此元素的值为:
*(*(arr+i)+j)或者arr[i][j]
指针数组:
*p[i]为存放i个指针的数组
数组指针:
(*p)[i]为指向数组的指针
若令int(*p)[4]=arr;
第i行第j个元素的地址指针表示为:
*(p+i*4)+j或者p[i]+j或者&p[i][j]
指针函数:
*p(void)为返回值为指针的函数
函数指针:
(*p)(void)为指向函数的指针
实例:
若有定义int a[4][10]; 则以下选项中对数组元素
a[i][j]引用错误的是: (0≤i<4, 0≤j<10) ( )
A)*(&a[0][0]+10*i+j)
B)*(a+i)+j
C) *(*(a+i)+j)
D) *(a[i]+j)