用 const 初始化结构数组

initialize array of structs with const

typedef struct{     
  int nim;         
  float ipk;         
  char nama[50];         
  char alamat[50];     
} dataMahasiswa;

int main() {    
    dataMahasiswa p[MAX];
    
    p[0] = (const dataMahasiswa){120321004,4.00,"DAVID LEO","SURABAYA"};
    p[1] = (const dataMahasiswa){120321002,4.00,"HANIF AHSANI","NGANJUK"};
}

const dataMahasiswa 的含义和作用是什么?

当我删除 (const dataMahasiswa) 时会发生什么(错误:'{' 标记前的预期表达式)

限定符 const 在复合文字中是多余的

p[0] = (const dataMahasiswa){120321004,4.00,"DAVID LEO","SURABAYA"};
p[1] = (const dataMahasiswa){120321002,4.00,"HANIF AHSANI","NGANJUK"};

你可以直接写

p[0] = (dataMahasiswa){120321004,4.00,"DAVID LEO","SURABAYA"};
p[1] = (dataMahasiswa){120321002,4.00,"HANIF AHSANI","NGANJUK"};

在这两个语句中,复合文字被分配给数组 p 的两个元素。

发生此错误是因为编译器无法获得正确的 struct(数据类型)来转换给定的数据。此功能在 C99 中首次引入,您应该阅读 this

但是,在 C++ 中,您不需要在 { 之前键入 struct 名称,大多数现代 C++ 编译器会自动执行此操作。

此外,您不需要在 struct 姓名前写 const

p[0] = (dataMahasiswa){120321004,4.00,"DAVID LEO","SURABAYA"};
p[1] = (dataMahasiswa){120321002,4.00,"HANIF AHSANI","NGANJUK"};