新建C.当我声明如下数组:数组名称代表什么?
char arr [3] = {'a', 'b', 'c'};
是什么,只需要将下面代表什么?
arr
以下几点有什么区别?每个人具体代表什么?
arr and &arr
将数组的起始点作为参数传递给接受1D数组的函数时会发生什么?这些值是否被复制到新的内存块中?
我知道在C中,一个数组只是一组分配的内存块组合在一起?是对的吗?我试图用C语言围绕数组,但我有点困惑。请尽可能多地提供见解。
新建C.当我声明如下数组:数组名称代表什么?
char arr [3] = {'a', 'b', 'c'};
是什么,只需要将下面代表什么?
arr
以下几点有什么区别?每个人具体代表什么?
arr and &arr
将数组的起始点作为参数传递给接受1D数组的函数时会发生什么?这些值是否被复制到新的内存块中?
我知道在C中,一个数组只是一组分配的内存块组合在一起?是对的吗?我试图用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:数组名不是可修改的左值。
将数组的起始点作为参数传递给接受一维数组的函数时会发生什么?这些值是否被复制到新的内存块中? – Vimzy 2015-02-12 05:18:45
@Gopi,我对Vimzy的问题回答不是,不是为了你的回答。也就是说,这些值不会被复制到新的内存块中。当你回答时,我正在输入这个答案,所以没有看到你的帖子。对不起,如果它冒犯了你。 :) – 2015-02-12 05:26:31
arr
&arr
和&arr[0]
全部存储阵列中第一个值的地址,即地址arr[0]
。
他们都是指针。
的评论
,当你在一个数组作为 参数接受一维数组函数的起点传递会发生什么?是否将 复制到新的内存块?
答案是,当地址通过时,无论对其进行何种更改都会反映到原始数组上。
请注意,'arr'和'&arr [0]'的类型与'&arr'的类型不同。而且,'arr + 1'和'&arr + 1'的行为总体上有很大不同。 – 2015-02-12 05:42:46
'arr'的类型是char *','arr'的类型是char [3] *',它们的值是一样的 – mangusta 2015-02-12 05:20:04
阅读此链接[http://stackoverflow.com/questions/8916656/为什么这是与arr-and-arr-the-same] – 2015-02-12 05:27:14
@mangusta:'&arr'的类型是char(*)[3]',它是一个指向3个char的数组的指针。你在错误的地方有*号,并且括号不够。 – 2015-02-12 05:40:47