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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值