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

c语言中,数组名的前面加*, 如a[3][4]; *a输出的是什么结果
2024-11-29 06:27:36
推荐回答(3个)
回答1:

由于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个元素的值。

回答2:

在 C 语言中,数组和指针是可以互相交换的。
根据语言标准,*a 和 a[0] 具有大致相同的效果。

在现行标准与真正的实现中,数组也是往往转化位其首元素的指针来操作的。

回答3:

*a是指的数组的第一列。