能够定义数组,例如
int a[] = {1,2,3};
非常方便,但是,数组 a 是一个右值,因此我无法随后更改 a 中的值,例如
a[] = {4,5,6};
想要做到这一点的背景是编写一堆单元测试,我将数组输入到函数中并测试输出。我正在使用不同的输入对同一函数运行测试,并且希望避免输入数组具有唯一的名称,例如我必须这样做:
int test1_a[] = {1,2,3};
/* calls to functions */
int test2_a[] = {4,5,6};
/* calls to functions */
此外,如果我想将指向数组的指针传递给函数,我必须首先像这样转换它:
int a[] = {1,2,3};
int *b = a;
my_func(&b);
像这样将指针传递给右值是行不通的:
my_func(&a);
我的问题是是否有其他方法可以轻松初始化值数组而不受这些限制的影响? (特别是为了轻松编写许多类似的单元测试,而无需每个测试都有一组唯一的数组名称)
最佳答案
如果您已经拥有要传递给函数的值,为什么不使用多维数组?
int a[][] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
}
for (int i = 0; i < 2; i++)
{
/* Call functions with 'a[i]' as argument */
}
此外,如果您调用的函数需要一个数组,并且您有一个例如int a[] = {...}; int *b = a;
,然后不要用 &b
调用他们。使用&b
传递指针的地址,而不是它指向的内容。
关于c - C 中的左值、右值和数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490071/