2015-02-12 43 views
1

新建C.当我声明如下数组:数组名称代表什么?

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

是什么,只需要将下面代表什么?

arr 

以下几点有什么区别?每个人具体代表什么?

arr and &arr 

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

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

+0

'arr'的类型是char *','arr'的类型是char [3] *',它们的值是一样的 – mangusta 2015-02-12 05:20:04

+0

阅读此链接[http://stackoverflow.com/questions/8916656/为什么这是与arr-and-arr-the-same] – 2015-02-12 05:27:14

+0

@mangusta:'&arr'的类型是char(*)[3]',它是一个指向3个char的数组的指针。你在错误的地方有*号,并且括号不够。 – 2015-02-12 05:40:47

回答

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:数组名不是可修改的左值。

+0

将数组的起始点作为参数传递给接受一维数组的函数时会发生什么?这些值是否被复制到新的内存块中? – Vimzy 2015-02-12 05:18:45

+0

@Gopi,我对Vimzy的问题回答不是,不是为了你的回答。也就是说,这些值不会被复制到新的内存块中。当你回答时,我正在输入这个答案,所以没有看到你的帖子。对不起,如果它冒犯了你。 :) – 2015-02-12 05:26:31

1

arr&arr&arr[0]全部存储阵列中第一个值的地址,即地址arr[0]

他们都是指针。

的评论

,当你在一个数组作为 参数接受一维数组函数的起点传递会发生什么?是否将 复制到新的内存块?

答案是,当地址通过时,无论对其进行何种更改都会反映到原始数组上。

+1

请注意,'arr'和'&arr [0]'的类型与'&arr'的类型不同。而且,'arr + 1'和'&arr + 1'的行为总体上有很大不同。 – 2015-02-12 05:42:46