2017-06-22 45 views
1

我想学C++初学者。道歉,如果我的问题没有适当的结构?我用阵列的工作,结果发现,我可以操作存储在通过的功能的数组中的值,而无需使用&或参照符号传递。我不明白这是怎么可能的,因为缺乏&标志意味着它是按值传递和复制由被操纵。数组如何通过引用或值或指针在C++中传递?

在其他地方,我读了数组由指针传递的,如果这是我没有使用任何明确的非关联化来操作数据的情况。你能解释一下当我传递数组时实际发生了什么吗?

边注:为什么我有指定列大小传递一个二维数组到一个函数是什么时候?

+0

阵列可以衰减到一个指向第一个元素的指针,它是通过值传递给函数的指针。这个指针衰减是避免原始数组和使用适当的容器类型的原因之一(可能是'std :: vector') – user463035818

+0

数组是通过指针传递的。如果你使用arr [i],它相当于*(arr + i),其中arr是数组的起始地址。 – user1438832

+1

...我不应该在评论中回答,但我确信有一个完美的重复,只是没有找到它atm – user463035818

回答

2

C-阵列衰变到指针。

一些声明误导太

void foo(const char name[42]); 

实际上

void foo(const char* name); 

只有参考/指针(难看的语法:/)允许以保持尺寸:

void foo(const char (&name)[42]); 
void foo(const char (*name)[42]); 
+0

仍然看起来比'void foo(const char [42]&name)'更好,或者是它...... – DeiDei

+0

这就是你应该使用'std :: array''而不是''T [] '':它不那么令人困惑,因为它不衰减 – nefas