簡體   English   中英

指向作為結構成員的結構的指針

[英]Pointers to structures as structure members

我在 21 天內完成了 Sam 的自學 C 的工作,我遇到了一個我無法理解的代碼片段。 這是第 11 天的練習 6。任務是“為名為data的結構類型編寫定義,該結構類型可以容納最多 20 個字符的字符串。” 我的解決方案是

struct data{
    char a[21];
};

愚蠢地使用結構,但沒關系。 我的虛擬代碼編譯並產生 21 的預期結果

#include <stdio.h>

struct data{
    char a[21];
} data_inst;

int main(void)
{
    printf("%lu\n", sizeof(data_inst.a));

    return 0;
}

但是,根據書上的答案是

struct data{
    char a[21];
    struct data *ptr;
};

我對正確答案的解釋是ptr是指向data類型的指針。 ptr也是data的成員。 這條附加線有什么意義? 包含指向自身的指針的結構有什么好處? 或者我只是在這里完全錯過了一些東西?

結構中的指針用於存儲下一個結構的地址,它通常用於鏈表中,我們要在其中存儲下一個節點的地址,以便它連接起來。 您可以搜索鏈表,您將獲得有關鏈表如何工作的詳細信息,根據您的代碼,不需要struct data *ptr因為您只需要制作一個 20 個字符的結構。 對於您的問題struct data *ptr的用途是什么,您可以參考鏈表。

指針並不指向這個結構,而是指向這個類型的結構。 當然它可以指向自己,但它也可以指向相同結構類型的另一個實例。

因此,您可以保留或指向data的第一個實例,如果有必要,它可以反過來指向另一個實例,依此類推。 這將允許您在一個這樣的實例中保留最多 20 個字符(或犧牲 null 字符串終止,最多 21 個明確),但使用多個實例來: 1/ 在多個實例上存儲超過 21 個字符的字符串 2 / 存儲最多 21 個字符的列表或字符串堆棧

If you define string as proper c style null terminated string, then of course it can only be up to 20. Otherwise you can use null for strings of length less than 21, and just avoid using null for strings of length 21 - you know that無論如何,在第 21 個字符之后就什么都沒有了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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