[英]Passing an array to a function and then changing the values?
基本上,假设我在int main()中声明一个数组,然后将其传递给另一个函数,然后可以更改该数组持有的值吗? 就像是:
int main()
{
myarray[3] = {4, 5, 6};
myfunc(myarray);
return 0;
}
int myfunc(int myarray[])
{
int x
cout << "Choose a number";
cin >> x
if (x == 1)
{
myarray[] = {0, 1, 3}
}
else
{
some code
}
return 6;
}
该代码显然不会编译,但是我真的想不出任何其他方法来更改函数内数组中的值。
您可以修改数组中的元素,但是初始化器列表如下:
myarray[] = {0, 1, 3}
只能在声明数组时使用。 要分配给数组,您将必须分别分配每个元素:
myarray[0] = 0;
myarray[1] = 1;
myarray[2] = 3;
使用现有的函数签名,无法安全地更改值。 通常你会做类似的事情
myarray[0] = 0;
myarray[1] = 1;
//etc
还有很多其他方法可以实现此目的,这取决于将值存储到数组中的方式( std::copy
或std::generate
在这里可能很方便)。 但是现在您还没有办法知道数组在哪里结束。
要对此进行修改,您需要以某种方式将数组的长度传递给函数。 一种方法是简单地传递一个额外的size_t length
参数。 按照C ++迭代器的精神,一种可以说更好的方法是将签名写为
int myfunc(int* begin, int* end);
并用类似的名称
myarray[3] = {4, 5, 6};
myfunc(myarray, myarray + sizeof(myarray) / sizeof(myarray[0]));
if (x == 1)
{
myarray[] = {0, 1, 3} // {0,1,3} is an initializer list.
}
仅在声明时才允许使用初始化程序列表。 不允许在作业中使用它们。 在if语句中,您正在执行赋值。 修改数组元素的唯一方法是通过更改if
中每个索引处的元素。
myarray[0] = 0;
myarray[1] = 1;
myarray[2] = 3;
这: myarray[] = {0, 1, 3}
-是错误的。
您应该传递数组的长度,然后运行一个会更改其值的循环。
您永远不要假定函数中数组的大小。 如果大小恒定,则将其myfunc(int myarray[THE_SIZE])
,否则必须为myfunc(int myarray[], int size)
,其中size
是传递的数组的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.