簡體   English   中英

為什么我不能使用結構變量 S 來訪問成員

[英]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初始值,然后是Top1Top2的初始值。 上面使用{0}指定Data[0]顯式初始化為 0,而Data的其余元素( [1][1023] )將隱式初始化為默認值 0。

暫無
暫無

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

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