c语言中,数组名的前面加*, 如a[3][4]; *a输出的是什么结果

c语言中,数组名的前面加*, 如a[3][4]; *a输出的是什么结果

由于a[3][4]是个二维数组,数组名是数组的首地址,也是一维a[3]的首地址,也是一维第一个元素a[0][0]的首地址,因此a a[0] a[0][0]三个的地址是相同的,那么*a在这里代表什么呢,*在这里代表的是取值符,而不是指针符号,由于a是个二维数组,*a代表的是取第一维的首元素,而这里一维里的元素本身又是一个一维数组,因此在a的第一维中是存放着三个一维元素的首地址,显然*a取到的就是第一维里第一个元素的首地址了,*(a+1)就是取到第一维里第二个元素的首地址了,你可以建一个一维数组int arr[] = {1,2,3}测试一下,在一维数组中,*arr代表的就是取第一个元素的值,它的值是个int型数值,也就是第1个元素1,而二维数组中的a[3]里存放的是三个元素(3个一维数组)的首地址,因此得出一个结论,二维数组里的第一维就是一个指针数组,每个指针指向三个元素(3个一维数组)的首地址。从而**a就是取第一维里第一个元素(1维数组)里的第1个元素的值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-26
在 C 语言中,数组和指针是可以互相交换的。
根据语言标准,*a 和 a[0] 具有大致相同的效果。

在现行标准与真正的实现中,数组也是往往转化位其首元素的指针来操作的。本回答被提问者和网友采纳
第2个回答  2015-08-12
*a是指的数组的第一列。追问

*不是指针的意思么,为什么可以用在数组

追答

是指针啊。*a指的是数组的第一列数据的地址。如a[0],a[1],a[2]。
*a[0]则是指从a[0][0],递增输出就把第一列的数据输出来了。

同理,可以把其他数据输出来。