簡體   English   中英

c struct的成員數組

[英]c struct member array of struct

我有這兩個結構

struct List {
    unsigned length;
    char * value;
};

struct bal {
    List name;              
    List ** attributes;     
};

因此,struct List將處理一個字符串,即通過char(通過使用malloc的函數)添加char來創建我的字符串。

我的struct bal是兩個成員,一個是結構列表的名稱,另一個是結構列表的數組,因此我可以向bal添加屬性。

在我嘗試訪問結構體的屬性列表之前,我沒有問題。 如果我的struct bal為3個屬性,則我的屬性列表的表示應如下所示:

attributes[0];
attributes[1];
attributes[2];

每個位置都是一個結構列表。 因此,如果我想說一個printf屬性,我的想法是,我必須要做類似的事情:

bal firstBal;

假設我在程序中添加了3個屬性。

然后要打印它,我要做:

printf( "The first attributes is : %s ", firstBal->attributes[0]->value);

但是當我這樣做時,我得到了錯誤:

error: request for member value in something not a structure or union

但是我不明白為什么? 我的結構體有一個成員,它是結構體列表的數組,所以當我在該數組中添加結構體列表時,我應該能夠訪問結構體列表的成員Value。

我的結構列表的成員值是一個字符串,所以...

非常感謝你 !

我發現您的代碼有兩個問題:

  1. 您在struct bal提到

    另一個成員是struct List數組

    但是,成員attributes在您的代碼中聲明為List ** ,即作為指向List變量數組的指針,我的猜測是這不是您想要的。

  2. ->運算符用於訪問指針變量指向的struct / union的成員(這就是它看起來像箭頭的原因)。 但是,在您的代碼中情況並非如此,因為firstBal並未定義為指針,而只是定義為struct bal類型的變量。 因此,為了使用其成員字段,您應該使用. 運算符,而不是->運算符(即firatBal.attributes )。

    現在, firstBal->attributes[0]類型取決於您要的內容。 如果您堅持將屬性設為List **類型,那么可以。 但是,根據我上面的評論,假設正確的類型是List *那么使用數組訪問運算符( [] )將已經為您提供了變量,而不是指向它的指針。 換句話說, firstBal->attributes[0]的類型為List和NOT List * ,這意味着您不能使用->運算符訪問其成員,而應使用. 算子

您需要聲明:

struct List attributes[3];

並且其指針應為* pattributes

pattributes =&attributes [0]; 以下。

暫無
暫無

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

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