繁体   English   中英

将数组传递给函数,然后更改值?

[英]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::copystd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM