C语言基础知识(一)结构体struct 和typedef struct区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Agoni_xiao/article/details/82660775

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只不过是给这个临时名字给了别名。

猜你喜欢

转载自blog.csdn.net/Agoni_xiao/article/details/82660775