簡體   English   中英

為結構指針賦值的語法

[英]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.

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