C新手。当我声明以下数组时:
char arr [3] = {'a', 'b', 'c'};
以下内容代表什么?
arr
以下是什么区别?每个人具体代表什么?
arr and &arr
将数组的起点作为参数传递给接受1D数组的函数时会发生什么?值是否被复制到新的内存块?
据我所知,在C中,数组只是一组分配在一起的内存块?是对的吗?我试图用C包围数组,但我有点困惑。请提供尽可能多的见解。
答案 0 :(得分:3)
arr
&arr
和&arr[0]
char arr[3] = {'1','2','3'};
--------------------
| 1 | 2 | 3 |
--------------------
|
|
arr &arr and &arr[0]
所以这些包含的内容没有区别。 所有都有数组的起始地址。
在C数组中是类似数据类型的连续元素集合。
如上所述,它们包含的内容相同,但请注意以下几点。
&arr
提供地址,例如0x1000
。
arr
也提供0x1000
。
现在递增指针arr
将为您提供数组的下一个元素的地址&arr[1]
`arr+1` != `&arr+1`
使用&arr+1
时,值&arr
会增加数组的大小(在本例中为3);它没有像指针一样指向数组中的下一个元素。
所以它们都是不同的类型,应该考虑到这一点。
PS:数组名称不是可修改的左值。
答案 1 :(得分:1)
arr
&arr
和&arr[0]
都存储数组中第一个值的地址,即arr[0]
的地址。
他们都是指针。
您的评论
将数组的起点作为a传递时会发生什么 接受一维数组的函数的参数?是否复制了值 到了一大块记忆?
答案是,当地址通过时,对其进行的任何更改都会反映在原始数组中。