可能重复:
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的初学者。
答案 0 :(得分:2)
char ar[] = "hello";
char ar2[];
char *ar3;
数组是不可修改的左值,因此以下语句无效:
ar2 = ar;
否则,可以将此值影响到指针。
ar3 = ar;
行为与2D数组和结构成员相同。
C11(n1570)
§6.3.2.1左值,数组和函数指示符
可修改的左值是一个没有数组类型[...]的左值。§6.5.16分配操作员
赋值运算符应具有可修改的左值作为其左操作数。