<分区>
C 的新手。当我声明以下数组时:
char arr [3] = {'a', 'b', 'c'};
以下代表什么?
arr
以下有什么区别?每一个具体代表什么?
arr and &arr
当您将数组的起点作为参数传递给接受一维数组的函数时会发生什么?值是否复制到新的内存块?
我知道在 C 语言中,数组只是组合在一起的分配的内存块 block ?是对的吗?我正在尝试围绕 C 中的数组进行思考,但我有点困惑。请提供尽可能多的见解。
<分区>
C 的新手。当我声明以下数组时:
char arr [3] = {'a', 'b', 'c'};
以下代表什么?
arr
以下有什么区别?每一个具体代表什么?
arr and &arr
当您将数组的起点作为参数传递给接受一维数组的函数时会发生什么?值是否复制到新的内存块?
我知道在 C 语言中,数组只是组合在一起的分配的内存块 block ?是对的吗?我正在尝试围绕 C 中的数组进行思考,但我有点困惑。请提供尽可能多的见解。
最佳答案
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:数组名不是可修改的左值。
关于c - 数组名代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28469808/