c语言和c++中struct和typedef struct的区别列举介绍 - c++语言程序开发技术文章_c++编程 - 红黑 - 龙8国际娱乐pt老虎机
频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
c语言和c++中struct和typedef struct的区别列举介绍
2018-06-28 10:34:28      个评论    来源:Wu_qz的博客  
收藏   我要投稿

1.C语言中struct和typedef struct的区别

最近跟着雷神的博客学习FFMPEG,在看FFMPEG的源码的时候发现有些语句写法和自己平时见的不太一样,比如下面的语句:

struct SwsContext *img_convert_ctx;

明明SwsContext 是一个结构体类型名称,为什么前边还要加一个struct,而且这个结构体的定义也是用typedef struct SwsContext { …};明白过来FFMPEG的源码是用c写的,不是用c++,所以在用c++编译器编译FFMPEG的库头文件的时候要用extern "C"{ XXX.h ...}。

不能用c++的语法规则来读FFMPEG的源码。这里总结一下c++和c在定义结构体的过程中的不同。

1.在c语言中定义一个结构体要用typedef struct,即

//定义1
typedef struct Number
{
 int a;
 int b;
};
//定义2
struct Number
{
int a;
int b;
};
//定义1和定义2使用时,都应该这样定义一个结构体变量
struct Number num1;

但是如果写成如下格式:

//定义3
typedef struct Number
{
int a;
int b;
}Num;
//定义3使用时,这样申请一个结构体变量
Num num1;//或者 struct Number num1; 
//定义4
typedef struct 
{
int a;
int b;
}Num;
//使用定义4
Num num1;

通过以上各个定义总结:

1.如果使用typedef来定义结构体时:型如typedef struct aaa { ..}bbb;

其中aaa是可以省略的,那么用bbb(如果有的话)来定义一个结构体变量时,可以直接用bbb xxx;就行。但用aaa来定义一个结构体变量时,则需要使用struct aaa xxx;

2.不使用typedef来定义结构体时,声明该类型变量都需要加上struct,即struct aaa xxx;

但应该注意如下定义形式:

struct {
int a;
int b;
}OnlyStruct;
//使用形式
OnlyStruct.a=10;
OnlyStruct.b=20;

上边OnlyStruct结构体由于没有类型名,只能用于OnlyStruct这一个变量,无法再申请该类型结构体的其他变量。

2.C++struct和typedef struct的区别

如果在c++中定义一个结构体如:

//定义1
struct Number
 {
  int a;
  int b;
 };
//使用定义1声明该类型结构体变量
Number num;//方式1
struct Number num;//方式2
点击复制链接 与好友分享!回本站首页
上一篇:c++包含min函数的栈(代码实例)
下一篇:C++基础之纯虚函数与抽象类实例讲解
相关文章
图文推荐

关于我们 | 联系我们 | 服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑--致力于做实用的IT技术学习网站

龙8国际娱乐pt老虎机