基本上,假设我在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;
}
这段代码显然不能编译,但我真的无法想到在函数中更改数组中值的任何其他方法。
答案 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::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]));
答案 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
是传递的数组的大小。