[英]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。
我的結構列表的成員值是一個字符串,所以...
非常感謝你 !
我發現您的代碼有兩個問題:
您在struct bal
提到
另一個成員是
struct List
數組
但是,成員attributes
在您的代碼中聲明為List **
,即作為指向List
變量數組的指針,我的猜測是這不是您想要的。
->
運算符用於訪問由指針變量指向的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.