簡體   English   中英

C:為什么我可以復制帶有 static 數組成員的結構,但不能復制 static arrays?

[英]C: Why can I copy structs w/ static array members, but not static arrays?

typedef struct {
  int p[10];
} array10;

int main() {
  array10 a = {(int[10]){...}};
  array10 b = {(int[10]){...}};
  a.p = b.p; // #1. doesn't compile, can't assign to int[10]
  a = b; // #2. successfully assigns b.p to a.p
}

雖然我明白這里發生了什么,但我覺得很好奇:如果#2 有效,那么為什么#1 不在語言中? 只要它們包裝在結構中,您就可以分配給 static arrays(從而按值傳遞它們)。 我是否遺漏了一些關於 C 的哲學,使它變得直觀?

C 標准在6.5.16p2中說

賦值運算符應有一個可修改的左值作為其左操作數。

6.3.2.1p1

...可修改的左值是沒有數組類型的左值...

所以 arrays 不能是賦值運算符的左操作數。

理由如下。 每當使用數組的值時,該值都會轉換為指向數組第一個元素(索引為 0)的指針。 因此不可能有一個具有數組類型的右值表達式。 因此,不可能形成任何可以分配給數組變量的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM