[英]Why i cant struct variable S be used to access members
我現在正在嘗試學習 C,並且我有一些基本的結構問題。 我想澄清:
#define MaxSize 1024
#define ElementType int
struct DStack
{
ElementType Data[MaxSize];
int Top1; // Stack top 1
int Top2; // the top 2
} S, S2;
S.Top1 = -1;
S.Top2 = MaxSize;
編譯代碼時發生錯誤。
doubleStack.c:17:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
17 | S.Top1 = -1;
| ^
doubleStack.c:18:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
18 | S.Top2 = MaxSize;
我的編譯器是gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
我編譯的命令是gcc doubleStack.c -o dbs &&.\dbs
我找不到我的代碼有什么問題。
在我的知識系統中,struct 可以這樣使用:
struct stu{
int num;
int age;
};
// or
struct stu{
int num;
int age;
}stu1, stu2;
我希望你能幫助我找出我的錯誤。
提前謝謝。
您不能在 function 之外進行分配 ( s.Top1 = -1;
)。
你可以:
#define MaxSize 1024
#define ElementType int
struct DStack
{
ElementType Data[MaxSize];
int Top1; // Stack top 1
int Top2; // the top 2
} S, S2;
int main(void) {
S.Top1 = -1;
S.Top2 = MaxSize;
}
您不能有諸如S.Top1 = -1;
類的語句。 在函數之外,但您可以使用初始化程序指定在函數之外定義的變量的初始值。
對於您的示例:
#define MaxSize 1024
#define ElementType int
struct DStack
{
ElementType Data[MaxSize];
int Top1; // Stack top 1
int Top2; // the top 2
};
struct DStack S = {
.Top1 = -1,
.Top2 = MaxSize
};
struct DStack S2;
上面的S
初始化使用指定的初始化語法,允許為單個成員或數組元素指定初始值。 未指定的成員和數組元素將被初始化為 0。
自 1999 版 C 標准以來,指定初始化程序一直是標准功能,但一些較舊的編譯器不支持它們。 如果不支持指定的初始化器,則可以使用舊形式的初始化器語法初始化S
,如下所示:
struct DStack S = {
{0}, /* Data[] */
-1, /* Top1 */
MaxSize /* Top2 */
};
使用較舊的語法,初始化程序中的值用於按照它們在struct
中聲明的相同順序來初始化成員,或者用於初始化從索引 0 開始的數組元素。 初始化器中的嵌套{
}
可用於初始化包含在另一個 object 中的復合對象,就像初始化上面的Data
數組成員一樣。 如果不使用嵌套的{
}
,則需要有 1024 個Data
初始值,然后是Top1
和Top2
的初始值。 上面使用{0}
指定Data[0]
顯式初始化為 0,而Data
的其余元素( [1]
到[1023]
)將隱式初始化為默認值 0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.