Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组是如何传递的?_C++_Arrays_Pointers_Pass By Reference_Pass By Value - Fatal编程技术网

C++ 数组是如何传递的?

C++ 数组是如何传递的?,c++,arrays,pointers,pass-by-reference,pass-by-value,C++,Arrays,Pointers,Pass By Reference,Pass By Value,默认情况下,数组是按ref还是按value传递的? 谢谢。它们作为指针传递。这意味着有关数组大小的所有信息都将丢失。最好使用std::vectors,它可以根据您的选择通过值或引用传递,因此保留了它们的所有信息 下面是一个将数组传递给函数的示例。注意,我们必须具体指定元素的数量,因为sizeof(p)将给出指针的大小 int add( int * p, int n ) { int total = 0; for ( int i = 0; i < n; i++ ) {

默认情况下,数组是按ref还是按value传递的?
谢谢。

它们作为指针传递。这意味着有关数组大小的所有信息都将丢失。最好使用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 );
}
int-add(int*p,int-n){
int-total=0;
对于(int i=0;i
数组是特殊的:它们总是作为指向数组的第一个元素的指针传递。

首先,不能按值传递数组,因为数组的副本已生成。如果需要该功能,请使用
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]);
模板
按引用(int&a)[大小]作废;

希望这能有所帮助。

谢谢Neil,但正如我在昨天的一篇文章中提到的,我目前正在编写TC++PL的练习,我必须使用oridinary数组。我只是想知道是否有必要写这样的东西:voidf(int&a)[size];或者仅仅声明为一个没有ref的数组就足够了。所以基本上,根据这个答案,它们传递的值是指针的大小。我说得对吗?@Neil我非常喜欢理学学士的教学和写作风格,我还认为一个人必须了解非常低级的工具以及更高级的抽象工具。不管怎样,我想是这样的。@atch如果他不解释数组是如何传递给函数的,然后期望您编写这样的代码,那么这不是一本好的教学书。“不管怎样,这是什么运动?”所有的男人都得和我妻子一起去商店。很快回来;)