2013-11-21 34 views
0

我想了解C中的struct和typedef的概念。所以我創建了這個簡單的程序,但由於某種原因它不工作。C中的結構誤解

#include <stdio.h> 
#include <stdlib.h> 

typedef struct testT{ 

    int number; 

} testT; 

int main() 
{ 
    testT.number=10; 

    printf("%d", testT->number); 
} 

但是,它給我 錯誤:預期標識符或 '(' 前令牌 爲什麼這個顯示出來

感謝

+0

另外我想我讀了typedef結構{}是一個C語法? – user2930701

回答

5

testT是一種類型,就像 ''? int,你需要使用一個變量:

testT t; 
t.number=10; 
printf("%d", t.number); 

還要注意的是,你應該使用點operato r .,因爲在指向struct的指針上使用箭頭運算符->

1

您需要創建結構的一個實例。你已經定義了它,但你需要實例化它。

testT mytestT; 
mytestT.number=10; 
... 
1

struct <name>typedef <type> <name>只定義類型。你有實際分配內存來保存類型的實例:

int main() 
{ 
    struct testT a; 
    a.number=10; 

    printf("%d", a.number); 
} 

而且你濫用->操作。這隻對指向結構體的指針有用。

int main() 
{ 
    struct testT a; 
    struct testT *b = &a; 
    a.number=10; 

    printf("%d", b->number); 
} 

b->number相當於(*b).number;

0

testT是一種類型。首先聲明類型testT

testT t; 

的變量,不要忘了改

printf("%d", testT->number); 

printf("%d", t.number); 
1

不,typedef struct xxx { ... } yyy;不是 '一個C++的語法',這是一個正確的C語法。

你在做什麼這裏定義了一個名爲testT類型的代表struct testT是含稱爲numberint類型的字段一個struct。

你需要做的,使用這種類型是什麼聲明類型的變量:

int main(void) 
{ 
    testT variable; 

    variable.number = 10; 
    printf("%d\n", variable.number); 
} 

->符號是用來取代(*).。例如:

//With variable declared like this : 
testT *variable; 
//You can write: 
variable->number 
//Or: 
(*variable).number 
0
typedef struct testT { 
    int number; 
} testT; 

定義了一個名爲testT類型,其使用像這樣當:

testT aTestStruct; 

在功能上等同於(匿名結構型):

struct { int number } aTestStruct; 

typdef只是讓我們可以從中拯救自己每次都必須重複struct { ... }的匿名結構聲明語法。