在C语言中,不能通过赋值运算符直接将一个数组复制到另一个数组。
int arr1[]={1,3,2};
int arr2[]={0};
arr2=arr1;//not possible
另外,如果我没记错的话,我们不能给已经定义的数组赋值......
int a[3];
a[]={1,3,2}; //this is not possible
在上面的代码中,a[]
和{1,3,2}
充当两个不同的数组,它们之间使用了赋值运算符。那么,这是否与第一个提到的情况相同?
请澄清一下。 谢谢。
最佳答案
is this following the same case mentioned at the first?
不,它们是不同的。
在第一种情况下,您尝试做的是数组赋值,这在 C 中是不可能直接实现的。语言语法规定 array name to be a non-modifiable lvalue ,所以
arr1 = arr2;
无效。 C11标准草案(§6.3.2.1)的相关摘录:
A modifiable lvalue is an lvalue that does not have array type, ...
第二种情况
int a[3];
a[]={1,3,2};
您试图将初始化列表 {1, 2, 3}
分配给无效的子表达式 a[]
,因此是非法的。分配给它什么并不重要; a[] = 1
也是无效的。
关于c - 通过赋值运算符复制数组和直接向已定义的数组赋值之间是否存在链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600289/