数组是默认通过 ref 还是 value 传递的?谢谢。
问问题
30262 次
3 回答
30
它们作为指针传递。这意味着有关数组大小的所有信息都将丢失。建议您使用 std::vectors 会更好,它可以根据您的选择通过值或引用传递,因此保留所有信息。
这是将数组传递给函数的示例。请注意,我们必须具体指定元素的数量,因为 sizeof(p) 会给出指针的大小。
int add( int * p, int n ) {
int total = 0;
for ( int i = 0; i < n; i++ ) {
total += p[i];
}
return total;
}
int main() {
int a[] = { 1, 7, 42 };
int n = add( a, 3 );
}
于 2010-04-01T11:07:28.573 回答
27
首先,在制作数组副本的意义上,您不能按值传递数组。如果您需要该功能,请使用std::vector
或boost::array
。
通常,指向第一个元素的指针是按值传递的。在这个过程中会丢失数组的大小,必须单独传递。以下签名都是等效的:
void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size); // the 7 is ignored in this context!
如果你想通过引用传递,大小是类型的一部分:
void by_reference(int (&a)[7]); // only arrays of size 7 can be passed here!
通常您将通过引用与模板结合使用,因此您可以使用具有不同静态已知大小的函数:
template<size_t size>
void by_reference(int (&a)[size]);
希望这可以帮助。
于 2010-04-01T13:01:46.793 回答
6
数组很特殊:它们总是作为指向数组第一个元素的指针传递。
于 2010-04-01T11:10:00.880 回答