C语言中一个二维数组 它的数组名是a 那a和*a有什么区别?

2025-04-13 05:21:32
推荐回答(4个)
回答1:

对于二维数组名a和*a,二者的区别在于类型不同。
对于
TYPE a[M][N];
当使用a时,可以等同于二级指针TYPE **型。
而使用*a时,等同于TYPE*型。
从概念上说,a表示二维数组a的首地址,而*a表示二维数组a第一行a[0]的首地址。这样在使用的时候就有所区别。比如 对a的操作a[4]表示a的第四行首地址,而对*a的操作(*a)[4]则代表第一行的第4个元素,即a[0][4]。

所以a和*a除了值相同外,其它的各方面都是不同的。

回答2:

数据名可以看作指针常量,分配数组空间时指针值就确定下来了,不像声明的指针变量那样,值是不能改变的。*a=a[0],对于二维数组a[0]也是一个指针,他们都指向数组的首地址,值都相等,但是,a和a[0]虽然值相等,但对他们进行指针运算时,地址偏移的基础不同。

回答3:

a是这个二维数据首地址,*a是第一个元素值。

回答4:

其实不大 *a就是a[0]都是第一行的地址