C中的合法数组赋值语句

时间:2012-10-20 13:07:40

标签: c arrays pointers multidimensional-array

  

可能重复:
  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的初学者。

1 个答案:

答案 0 :(得分:2)

char ar[] = "hello";
char ar2[];
char *ar3;

数组是不可修改的左值,因此以下语句无效:

ar2 = ar;

否则,可以将此值影响到指针。

ar3 = ar;

行为与2D数组和结构成员相同。

  

C11(n1570)

     

§6.3.2.1左值,数组和函数指示符
   可修改的左值是一个没有数组类型[...]的左值。

     

§6.5.16分配操作员
  赋值运算符应具有可修改的左值作为其左操作数。