2

可能重复:
C 中的 char s[] 和 char *s 有什么区别?
char *str = “…” 和 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 的初学者。

4

1 回答 1

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

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

ar2 = ar;

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

ar3 = ar;

二维数组和结构成员的行为相同。

C11 (n1570)

§ 6.3.2.1 左值、数组和函数指示符
可修改的左值是不具有数组类型的左值 [...]。

§ 6.5.16 赋值运算符
赋值运算符应有一个可修改的左值作为其左操作数。

于 2012-10-20T13:10:56.897 回答