首頁 > 後端開發 > C++ > 為什麼我不能直接為數組賦值,但可以在 C/C 中的結構體中賦值?

為什麼我不能直接為數組賦值,但可以在 C/C 中的結構體中賦值?

Susan Sarandon
發布: 2024-12-19 22:49:09
原創
463 人瀏覽過

Why Can't I Assign Arrays Directly, But I Can Within Structs in C/C  ?

為什麼僅在結構體中支持數組成員賦值

與一般數組不同,結構中定義的數組享受成員賦值。雖然不允許將一個陣列分配給另一個陣列(__

num1 = num2;//
登入後複製
),但它在結構中變得可行(
struct1 = struct2; //&lt ;/pre>__),如下圖:<pre class="brush:php;toolbar:false">int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
登入後複製

歷史和哲學原理

這種差異源自於 C 的演變。在早期迭代中,數組本質上是沒有大小資訊的指標。這阻礙了他們的分配,因為編譯器缺乏必要的數據。然而,結構內的數組受益於特殊的處理,從封閉的結構繼承其類型和大小資訊。因此,它們可以在結構體的上下文中按成員進行分配,而不受一般約束的影響。

這種做法被延續到現代 C 和 C 中,這是一個解決分配開放數組的實作挑戰的怪癖。引入通用數組分配會帶來歧義和相容性問題。因此,限制得以保留,並鼓勵程式設計師使用 memcpy 進行明確數組複製。

異常

函數參數已成為陣列成員可以的另一種設定分配的。考慮以下程式碼:

typedef int vec[3];

void f(vec a, vec b) {
    a = b; // pointer assignment
}
登入後複製

雖然 a 是指標參數,但賦值有效地執行了按元素複製,儘管位於結構之外。此異常本質上是一種增強功能,允許在函數呼叫中使用值語義。

以上是為什麼我不能直接為數組賦值,但可以在 C/C 中的結構體中賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板