指针数组数组指针

二维数组: 1)定义形如int a[2][3],此时a代表的是这个二维数组的地址,sizeof(a)为24。 二级指针: 1)定义形如int **p:表示为指向指针的指针 2)二级指针不能和二维数组替换,如int aa[2][3],**a;a=aa;是错误的,但可以用int (*a)[3];a=aa替换。 指针数组: 1)定义形如int *p[5]:表示含有五个指针元素的数组、又称为二维指针,可以和p[5][n]在一定情况下通用,sizeof(p)为20。 2)每个元素均是指针。如p[0]、p[1]均是指针。 如 char *p[5]={ “saf”, “rfsdfds”, “gjnaf”, “asdfds”, “wef” }; p[0]~p[4]均表示字符串的地址

3)p相当于数组名是一个常量不可以更改,类似p++、p+=1均是错误的,所以p不能作为左值。 4)指针数组和二级指针之间的替换 char *p[5]={“saf”,”rfsdfds”,”gjnaf”, “asdfds”,”wef”}; char **q; q=p;//此时相当于将p隐式转换了。还可以理解为p本身就是一个一维数组(一维数组的地址),只是多一个,那么就可以用多一个的一级指针来替换。

5)指针数组作为参数 函数声明为void fun(char *p[]),调用fun(p).

数组指针: 1)定义形如int (*a)[3].a为指向数组的指针,sizeof(a)为4。 2)数值指针可以和多维数组替换,但是多级指针不可以和多维指针替换。 如 int (*a)[3],**aa,aaa[2][3]; a=aaa;//正确 aa=a;//错误 aa=aaa;//错误 因为a和aaa都表示一个数组指针,,而aa仅仅表示一个指针的指针。 3)作为形参 void fun(int (*a)[3])//二维下标必须要明确指出,后面编译器计算a[i][1]的地址就相当于计算a+i*3+1. { int i; for(i=0;i<2;i++) printf(“%d”,a[i][1]); } int main() { int a[2][3]={1,2,3,4,5,6}; fun(a); }

第一个青春是上帝给的;第二个的青春是靠自己努力的

指针数组数组指针

相关文章:

你感兴趣的文章:

标签云: