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

时间:2011-09-24 23:08:46

标签: c++ arrays function pointers

基本上,假设我在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;
}

这段代码显然不能编译,但我真的无法想到在函数中更改数组中值的任何其他方法。

4 个答案:

答案 0 :(得分:3)

您可以修改数组中的元素,但初始化程序列表如下:

myarray[] = {0, 1, 3}

只能在声明数组时使用。要分配给数组,您必须单独分配每个元素:

myarray[0] = 0;
myarray[1] = 1;
myarray[2] = 3;

答案 1 :(得分:1)

使用现有的功能签名,无法安全地更改值。通常你会做像

这样的事情
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]));

答案 2 :(得分: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;

答案 3 :(得分:0)

这:myarray[] = {0, 1, 3} - 错了。

你应该传递数组的长度,然后运行一个可以改变其值的循环。

你永远不应该假设你在函数中获得的数组大小。如果大小不变 - 请将其设为myfunc(int myarray[THE_SIZE]),否则必须为myfunc(int myarray[], int size),其中size是传递的数组的大小。