c - C 中合法的数组赋值语句

标签 c arrays pointers multidimensional-array

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/

相关文章:

c - 如何使用 cmake 导出系统库?

c - 如何在 C 中打印 "unsigned long"?

java - 如何在MapView上添加多个标记——一百多个

c - 我似乎无法弄清楚如何使用纯指针表示法正确传递参数

c - 更好的基准同步

arrays - 如何将一个值添加到数组的中间?

javascript - 如何从 JavaScript 数组中删除特定项目?

c - 从文件写回结构(也是链表)时出现段错误

c - 指针、转换和不同的编译器

c - printf - 带指针的 "unexpected"输出