1. 程式人生 > >C語言基礎知識(一)結構體struct 和typedef struct區別

C語言基礎知識(一)結構體struct 和typedef struct區別

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只不過是給這個臨時名字給了別名。