Possible Duplicate:
What is the difference between char s[] and char *s in C?
Difference between char *str = “…” and char str[N] = “…”?
我是 C 编程初学者。我对这些事情感到困惑:
char ar[]="hello";
char ar2[], *ar3;
ar2=ar;
ar3=ar;
对于 2D 数组,上述内容也是合法的,例如:
int arr[2][2]={{1,2},{3,4}};
int arr1[2][2],**arr2,*arr3;
arr1[0]=arr[0];
arr1=arr;
arr2=arr;
arr3=arr;
另一个令人困惑的是,我已经看到上面的结构在结构情况下是有效的。
struct test{
int ar[2];
} t1, t2;
int main()
{
t1.ar[0]=0;
t1.ar[1]=1;
t2.ar=t1.ar;
}
请耐心等待,我是 C 初学者。
最佳答案
char ar[] = "hello";
char ar2[];
char *ar3;
数组是一个不可修改的左值,因此以下语句无效:
ar2 = ar;
否则,可能会影响该值到指针。
ar3 = ar;
该行为与 2D 数组和结构成员相同。
C11 (n1570)
§ 6.3.2.1 Lvalues, arrays, and function designators
A modifiable lvalue is an lvalue that does not have array type [...].§ 6.5.16 Assignment operators
An assignment operator shall have a modifiable lvalue as its left operand.
关于c - C 中合法的数组赋值语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988758/