版权声明:本文为博主原创文章,未经博主允许不得转载。 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只不过是给这个临时名字给了别名。