个人理解:
问题一
int a[10],当a为一维数组a就是a[0]元素的地址,如果a是二维数组。a指的是a[0]元素的地址,而a[0]元素的值,储存的是a[0][0]的地址,就是说把a[0]想象成a,所以说a[0]储存的是下一维a[0][0]的地址。用*a[0]就可以访问a[0][0]的值
问题二
int (*a)[4] 指的是创建一个指向只有4个元素的指针,从问题一,a可以想象成a[],然后a[4]就是一个具有4个元素的数组了。所以把指针a指向a[]就行了.
问题三
int (*a)[10]和int *a[10]
第一个已经说明了。a是一个指向具有十个元素的指针。
*a[10]所指10个指针数组
和*a的道理一样。
就像你创建十个指针一样。*b,*c一样
int (*a)[10]和int *a[10]有什么区别
int *a[10] 这个很好理解就是和书上的一样
int (*a)[10]这个意思就不同了
首先看int a[10]意思是s数组对吧
那么对比一下就好理解了
定义的是10个指针变量!
你要清楚指针和数组不是一回事,只是作为函数参数传递时数组会转化成指向第一个元素的指针,所以问题一里,a指向a[0],问题二,不知道你说什么,说清楚呀。。。。,问题三:int(*a)[10]表示a是一个指针,指向一个整形数组,数组有十个整数,int *a[10]表示a是个数组,有十个元素,每个元素是整形指针。
a[10]中a是首元素即a[0]的地址,一维数组没有行的概念,
第三个问题:
int (*a)[10],a 是指向“具有十个整型元素的数组”的指针,
int *a[10],a 是“具有十个整型指针元素”的数组。
问题二,int (*a)[4],a是二级指针(指向数组(相当于指针)的指针)
问题2你说的我还不太明白