数组名称代表什么?

时间:2015-02-12 05:13:37

标签: c arrays pointers

C新手。当我声明以下数组时:

char arr [3] = {'a', 'b', 'c'};

以下内容代表什么?

 arr

以下是什么区别?每个人具体代表什么?

arr and &arr

将数组的起点作为参数传递给接受1D数组的函数时会发生什么?值是否被复制到新的内存块?

据我所知,在C中,数组只是一组分配在一起的内存块?是对的吗?我试图用C包围数组,但我有点困惑。请提供尽可能多的见解。

2 个答案:

答案 0 :(得分:3)

arr &arr&arr[0]

char arr[3] = {'1','2','3'};

--------------------
|  1    | 2   |  3 |
--------------------
   |
   |
arr &arr and &arr[0]

所以这些包含的内容没有区别。 所有都有数组的起始地址。

在C数组中是类似数据类型的连续元素集合。

如上所述,它们包含的内容相同,但请注意以下几点。

&arr提供地址,例如0x1000arr也提供0x1000

现在递增指针arr将为您提供数组的下一个元素的地址&arr[1]

`arr+1` != `&arr+1`

使用&arr+1时,值&arr会增加数组的大小(在本例中为3);它没有像指针一样指向数组中的下一个元素。

所以它们都是不同的类型,应该考虑到这一点。

PS:数组名称不是可修改的左值。

答案 1 :(得分:1)

arr &arr&arr[0]都存储数组中第一个值的地址,即arr[0]的地址。

他们都是指针。

您的评论

  

将数组的起点作为a传递时会发生什么   接受一维数组的函数的参数?是否复制了值   到了一大块记忆?

答案是,当地址通过时,对其进行的任何更改都会反映在原始数组中。