C語言基礎知識(一)結構體struct 和typedef struct區別
阿新 • • 發佈:2018-11-10
C與C++中struct 和typedef struct區別從三個方面對比
1、宣告變數方便:
在C語言中,常常見到typedef修飾結構體,如:
#include<stdio.h>
typedef struct _TEST
{
int value;
char mat;
}TEST;
int main()
{
TEST a; //struct TEST a
printf("the size of a is %d",sizeof(a));
return 0;
}
不難看出在宣告變數的時候,直接TEST a;而不用struct _TEST a; 因為TEST是_TEST 的別名。執行結果如下:
在C++中很簡單
#include<iostream>
using namespace std;
struct TEST
{
int value;
char mat;
};
int main()
{
TEST a;
cout<<"the TEST_ONE size is"<<sizeof(a) <<endl;
return 0;
}
不用typedef修飾,可以直接使用結構體名字宣告變數,執行結構如下:
2、在C++中使用typedef有區別
C++中不使用typedef struct 時,定義的結構體變數,可直接訪問結構體成員 。如下:
#include<iostream>
using namespace std;
struct _TEST_ONE
{
int value;
char mat;
}TEST_ONE;
typedef struct _TEST_TWO
{
int val;
}TEST_TWO;
int main()
{
TEST_TWO b;
cout<<"the TEST_ONE value is"<<TEST_ONE.value<<endl;
return 0;
}
結構體TEST_ONE 可以通過TEST_ONE直接訪問自己的成員
C++中使用typedef struct 時,定義的結構體變數,不能直接訪問結構體成員。如下:
因為有了typdef struct修飾結構體,結構體有了名字,所以必須顯式的通過結構體變數來訪問成員,如下:
#include<iostream>
using namespace std;
struct _TEST_ONE
{
int value;
char mat;
}TEST_ONE;
typedef struct _TEST_TWO
{
int val;
}TEST_TWO;
int main()
{
TEST_TWO b;
cout<<"the TEST_ONE value is"<<TEST_ONE.value<<endl;
cout<<"the TEST_TWO value is"<<b.val<<endl;
return 0;
}
通過結構體變數b去訪問成員val,這樣就沒問題了。
3、多個命名
#include<iostream>
using namespace std;
struct TEST
{
int value;
char mat;
}AAA,BBB,CCC;
typedef AAA BBB;
typedef AAA CCC;
C語言中會先宣告出AAA型別,並把BBB CCC的名字命名為AAA
typedef struct和struct的區別:
上例中的_TEST_ONE 是一個臨時的名字,無論有無typedef sturct ,typedef sturct只不過是給這個臨時名字給了別名。