struct和typedef struct在c語言中的用法


在c語言中,定義一個結構體要用typedef ,例如下面的示例代碼,Stack sq;中的Stack就是struct Stack的別名。

如果沒有用到typedef,例如定義

struct test1{
int a;
int b;
int c;

};

test1 t;//聲明變量

下面語句就會報錯

struct.c:31:1: error: must use 'struct' tag to refer to type 'test1'

test1 t;

^

struct 

1 error generated.

聲明變量時候就要用struct test1;這樣就解決了

 

如果這樣定義的話

typedef struct test3{
int a;
int b;
int c;
}test4;

test3 d;
test4 f;

此時會報錯

struct.c:50:1: error: must use 'struct' tag to refer to type 'test3'

test3 d;

^

struct 

1 error generated.

所以要struct test3這樣來聲明變量d;

 

分析一下:

上面的test3是標識符,test4 是變量類型(相當於(int,char等))。

 

 我們可以用struct test3 d來定義變量d;為什么不能用test3 d來定義是錯誤的,因為test3相當於標識符,不是一個結構體,struc test3 合在一起才代表是一個結構類型。

所以聲明時候要test3時候要用struct test3 d;

 

typedef其實是為這個結構體起了一個新的名字,test4;

typedef struct test3 test4;

test4 相當於struct test3;

就是這么回事。

 

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

typedef struct Stack
{
char * elem;
int top;
int size;
}Stack;

struct test1{
int a;
int b;
int c;

};

typedef struct{
int a;
int b;
int c;

}test2;
int main(){

printf("hello,vincent,\n");
Stack sq;
sq.top = -1;
sq.size=10;
printf("top:%d,size:%d\n",sq.top,sq.size);

// 如果定義中沒有typedef,就要用struct test1聲明變量,否則報錯:
struct test1 t; t.a=1; t.b=2; t.c=3; printf("a:%d,b:%d,c:%d\n",t.a,t.b,t.c); test2 e; e.a=4; e.b=5; e.c=6; printf("a:%d,b:%d,c:%d\n",e.a,e.b,e.c); return 0; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM