在学习C语言的过程中,相信很多朋友会碰到一些关于指针与数组方面的问题,特别是int (*p)[4],这个到底代表是什么,怎么才能更好的理解。
int a[4] = {1,3,5,7};// 一维数组
int b[3][4] = {{1,3,5,7},{2,4,6,8},{3,5,7,9}};// 二维数组
int *p;// p是指向整型变量的指针
int (*q)[4]; // q是指向一维数组(int (*) [4],并不是指向某个元素)的指针
p = a;
a代表首元素的地址,即&a[0]
注意:&a是代表整个数组(int(*)[4])
a+1 ==> &a[1],指针指到了a[1]的地址
&a+1 ==> 指针指向了数组a内存地址的末尾了(如果a是二维数组,则是下一行)
p = &a; 这是错误的写法,p为指向int *类型(即某一个整型变量的地址,如int number, a[0]),而&a类型为int(*)[4]
p = b[0];
q = b;
二维数组,即一维数组里面又有一维数组
数组名即表示首元素的地址,b的首元素是b[0],b[0]是一个一维数组(int(*)[]),所有二维数中的b[0]等同于一维数组a,即b[0]表示的是b[0][0]的地址&b[0][0]
q是指向数组(数组int(*)[],不是数组的某一元素int *)的指针,所以 q = b
只要是理解数组名,&+数组名分别表示什么,指针指向的是什么类型。