[英]Syntax to assign values to struct pointer
我有一個關於語法和代碼的快速問題。
我剛剛發現了一種在C中聲明結構的方法,這與我到目前為止看到的有點不同。
這是示例代碼:
#include <stdio.h>
struct student {
int age;
int grade;
char* name;
};
int main () {
struct student s = { .name = "Max", .age = 15, .grade = 8 };
return 0;
}
將變量指定為.var_name可以正常工作,您可以按照您想要的任何順序進行分配。 我喜歡這種方法,所以我開始嘗試,因此撞牆。 如果我要宣布:
struct student *s = { ->name = "Max", ->age = 15, ->grade = 8 };
這不行。 當使用指針作為上面的代碼時,是否有任何語法可以提供相同的結果?
謝謝!
一般來說,您不能“為指針賦值”。 指針僅存儲單個值,該值是已存在對象的地址。
如果指針指向現有的struct變量,則可以初始化:
struct student s = { .name = "Max", .age = 15, .grade = 8 };
struct student *p = &s;
如果你想使用動態內存分配,事情會變得有點棘手:
struct student *p = malloc(sizeof *p);
if (!p) {
...
}
malloc
為您提供未初始化的內存,並且您不能對現有對象使用初始化程序語法。
但你可以使用涉及復合文字的技巧(自C99起可用):
*p = (struct student){ .name = "Max", .age = 15, .grade = 8 };
這里我們使用復合文字來創建一個新的未命名的struct對象,然后將其內容復制到*p
。
在第一個示例中,可以使用相同的功能來擺脫s
:
struct student *p = &(struct student){ .name = "Max", .age = 15, .grade = 8 };
但在這個版本中, p
仍指向自動內存(如局部變量)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.