c/c++语言开发共享c语言和c++中struct和typedef struct的区别列举介绍

1.c语言中struct和typedef struct的区别 最近跟着雷神的博客学习ffmpeg,在看ffmpeg的的时候发现有些语句写法和自己平时见的不太一样,比如下面的语句: struct


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.在中定义一个结构体要用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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607942.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐