• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

C的数据结构和C++的有区别吗

C语言和C++描述数据结构最大的区别在于设置思想,C语言是一种结构化程序设计语言,而C++是一种面向对象的程序设计语言,它两者的区别主要在于数据和操作的关系。

一、C的数据结构和C++的区别

C语言和C++描述数据结构最大的区别在于设置思想,C语言是一种结构化程序设计语言,而C++是一种面向对象的程序设计语言,它两者的区别主要在于数据和操作的关系。
C语言是定义数据类型,数据类型定义变量,然后函数操作变量,换句话说C语言是“操作的数据”。
C++是定义类,类本身就具备操作,换句话说,C++是“数据的操作”。

而对于结构体,C++中结构体和类基本完全类似。C++中结构体能继承、能实现多态!结构体中也可以包含构造函数和析构函数和其他内部成员函数,因此结构体和类基本雷同!少数的区别是,类中的成员变量默认为私有,而结构体中则为公有。

虽然二者基本毫无区别,struct更适合作为数据结构的实现体,class更适合作为对象的实现体。

延伸阅读:

二、C/C++结构体占用内存大小问题

计算struct占用的内存大小需要考虑两点:一是各个分量的偏移地址的计算,二是最终整体大小要进行地址对齐(为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节)。

struct{ 

    char a[15]; //占15个字节,从0开始偏移,所以下面的int是从15开始偏移 

    int x;//偏移量 0x15+1=16 

}s1; 

cout<<sizeof(s1)<<endl; //结果为20字节 

struct{ 

    char a[15]; // 

    int x; //偏移量 16字节 

    char b; //偏移量 21字节 

}s2; //结果为21字节,按最大基本类型对齐,补充到24字节 

cout<<sizeof(s2)<<endl; //结果为24字节 

struct{ 

    char a[15]; 

    int x;  //偏移量 16字节 

    double b; //double偏移量必须为8的倍数,故偏移量24字节 

}s3;// 

cout<<sizeof(s3)<<endl; //结果为32字节

struct{ 

    char a[15]; 

    int x;  //偏移量 16字节 

    double b; //偏移量 24字节 

    char c;//偏移量 32字节 

}s3;//共33字节,按最大基本类型对齐,补充到40字节(整除8) 

cout<<sizeof(s3)<<endl; //结果为40字节

相关文章