首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言結構體數組成員賦值報錯:左值必須可寫,數組名不可賦值

     編輯:程式設計疑難解答

錯誤代碼

struct nameinfo {
    char name[50];
    char phone[50];
    int num[20];
};

void main() {
    struct nameinfo a;
    a.num = 120; // 編譯錯誤:左操作數必須為左值
    printf("%d", a.num);
}

原因

`a.num` 是數組名,代表數組首地址(常量指針),不可作為左值賦值。 只能對**數組元素**賦值,如 `a.num[0] = 120;`。

驗證

printf("%p", a.num); // 輸出首地址,如 0x7ffd...,不可修改

正確用法

// 1. 對單個元素賦值
a.num[0] = 120;
a.num[1] = 200;

// 2. 整體賦值(需逐元素或 memcpy)
int src[20] = {120};
memcpy(a.num, src, sizeof(src));

// 3. 初始化時賦值
struct nameinfo a = { .num = {120, 200} }; // C99 指定初始化器
// 或
struct nameinfo a = { "", "", {120} };     // 順序初始化

核心概念

  • **左值**:可寫的記憶體位置(變量、解引用指針、數組元素)。
  • **數組名**:編譯期常量地址,不可修改,不可賦值。
  • **結構體賦值**:結構體整體可賦值(`a = b`),會逐字節複製,包含數組成員。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved