学c++之前最好先学c。特别要说的是,一些虽然冠名为c++的项目的文件中却大部分都是c的代码。

比如我们这个例子:

在c语言中,定义一个结构体和其实适合c++中有区别的。比如我们有如下的代码:

struct Animal

{

  float weight;

};

如果是c代码,要定义一个Animal对象,则需要这么写:

struct Animal a1;

而如果是c++大家都熟悉,struct Animal可以当做类似class Animal来使用。那么就是:

Animal a1;

明显可以看得出来,因为c不是面向对象的,所以它的语法在针对对象的时候也有些蹩脚。所以要专门的告诉编译器Animal是一个struct,不然编译器不知道。

但是每次都这样写自然非常麻烦切不美观。所以才有了typedef struct 原名 {结构体中的内容};别名; 这样的格式。

typedef struct Animal

{

  float weight;
}Ani;

这样 Ani 就等价于 struct Animal。定义一个变量的时候就可以写成:

Ani a1;

最后说一下,不管是c代码还是c++代码,诸如 typedef struct 原名 {结构体中的内容};别名; 这样的格式 来声明结构体,在两种语言中的意义是相同的,也就是所谓的抹掉了两种语言之间的差别。此外还能保证这条语句是一个声明语句而非定义了对象。因此这样来声明结构体,在c/c++的程序中是非常值得推荐的。

typedef struct 与 struct的更多相关文章

  1. typedef struct与struct的区别

    typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据 ...

  2. typedef struct与struct定义结构体

    今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处: 结构也是一种数据类型, 能够使用结构变量, 因此,  象其他 类型的变量一样, 在使用结构变量时要先对其 ...

  3. 转:struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系

    在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t; ...

  4. struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系

    在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t; ...

  5. linux网络接口,struct ifreq struct ifconf结构

    网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示: 接口 SIOCGIFCONF SIOCSIFADDR SIOCGIFADDR SIOCSIFBRDADDR SI ...

  6. 结构体struct sockaddr_in, struct sockaddr,struct in_addr

    一.结构体 struct sockaddr_in,  struct sockaddr,  struct in_addr struct sockaddr_in,  struct sockaddr,str ...

  7. typedef 及其与struct的结合使用

    //相当于为现有类型创建一个别名,或称类型别名. //整形等 typedef int size; //字符数组 ]; ];//=> typedef ]; Line text, secondlin ...

  8. [转载]typedef struct和struct的区别

    typedef struct tagMyStruct {  int iNum; long lLength; } MyStruct; 上面的tagMyStruct是标识符,MyStruct是变量类型(相 ...

  9. 关于 typedef struct 和 struct

    举个例子说明:typedef struct abc{ int x; int y; int z;}ABC;是将结构体abc类型重新起个名字为ABC,以后再定义同一类型的变量时,可以写成:ABC m,n; ...

随机推荐

  1. Centos7安装MySQL8.0

    请到这个地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安装MySQL8.0 - 操作手册 一.yum安装方式: 卸载之前版 ...

  2. pytorch 检测图片中是否有人

    照搬pytorch官方代码,只是将数据集换成了INRIAPerson数据集中的train和test文件夹. 贴下代码和效果,代码是官方的,就不详细解释了. # License: BSD # Autho ...

  3. P3768 简单的数学题(莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3768 [题目描述] 求 \(\sum_{i=1}^{n}\sum_{j=1}^{n}i* j* gcd( ...

  4. BestCoder Round #66 1001

    GTW likes math Accepts: 472      Submissions: 2140  Time Limit: 2000/1000 MS (Java/Others)  Memory L ...

  5. hdu3746 KMP-next数组的应用

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. mysql 安装以及卸载 CentOS 6.9

    mysql官网下载地址:https://dev.mysql.com/downloads/mysql/ 本次操作系统是    阿里云服务器 CentOS 6.9 64位 下载得到tar 包: mysql ...

  7. 转 Celery 使用

    http://www.mamicode.com/info-detail-1798782.html https://blog.csdn.net/lu1005287365/article/details/ ...

  8. swagger2使用日志

    ------------------------------------------------------------------------------------ 安装.配置.使用 参考:htt ...

  9. appium手机自动化环境搭建

    在robotframework环境安装完成的基础上进行如下安装,如果没有安装rfs环境,请先参考robotframework安装文章:Robot Framework的环境搭建 文件下载地址:链接:ht ...

  10. 在ubuntu中安装mysql及简单操作方式

    老规矩,ctrl+alt+t呼出终端, 输入 sudo apt-get update 更新源,否则在运行下面代码时会报出有几个包无法下载,你还是得回来执行这句代码, 输入 sudo apt-get i ...