C语言指针问题,都快要被整疯了...求高手帮忙 小弟感谢不尽

来源:百度知道 编辑:UC知道 时间:2024/05/26 23:51:21
问题一
int a[10] 这是一个一维数组 其中a指向行的地址还是a[0]的元素地址?
我认为是元素的列地址吧?要不然*(a+1)也不会是a[1]的值是吗?是行地址就应该是*(*a+1)了
问题二
主调函数为二维数组例如int a[][4] 把a给分函数形参为int (*a)[4],这个传递的是行的地址吧?(我书上是这么写的) 可是形参声明的是一个一维数组,a接受的是一个行的地址和问题一就冲突了...
问题三
int (*a)[10]和int *a[10]有什么区别?
楼下的啊 谁回答得全面点啊 ....帮帮我啊

个人理解:
问题一
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你说的我还不太明白