C与C++结构体的区别

原创 2017年06月04日 21:14:45

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

不论在面试中还是项目开发中,都会遇到C与C++混用的情况,面对这些我们就要对它们的区别非常熟悉,这样才能在项目中运用自如。在此也是给读者做一个总结,供参考。。。。。

在C ++中,struct和class是完全相同的,除了该struct默认为public 可见,class默认为private不可见。
C和C ++结构之间的一些重要区别:

  1. 结构内的成员函数:C中的结构不能在结构内部具有成员函数,但C ++中的结构可以与成员函数一起使用。
  2. 直接初始化:我们不能直接初始化C中的结构数据成员,但我们可以在C ++中实现。
首先给读者展示的是C语言代码:
// C program to demonstrate that direct
// member initialization is not possible in C
#include<stdio.h>
 
struct Record
{
   int x = 7;
};
 
// Driver Program
int main()
{
    struct Record s;
    printf("%d", s.x);
    return 0;
}
/* Output :  Compiler Error
   6:8: error: expected ':', ',', ';', '}' or 
  '__attribute__' before '=' token
  int x = 7;
        ^
  In function 'main': */

输出编译错误,因为在C语言中的成员不能赋初值。

再给读者展示C++中的代码展示:
// CPP program to initialize data member in c++
#include<iostream>
using namespace std;
 
struct Record
{
    int x = 7;
};
 
//  Driver Program
int main()
{
    Record s;
    cout << s.x << endl;
    return 0;
}
// Output
// 7

输出结果是7,编译正确。
3、使用struct关键字:在C中,我们需要使用struct声明一个struct变量。在C ++中,struct不是必需的。例如,让Record有一个结构。
在C中,我们必须对Record变量使用“struct Record”。在C ++中,我们不需要使用struct,只能使用'Record'。
4、静态成员: C结构不能有静态成员,但允许使用C ++。
C的案例代码如下所示:
// C program with structure static member
struct Record
{
    static int x;
};
 
// Driver program
int main()
{
    return 0;
}
/* 6:5: error: expected specifier-qualifier-list 
   before 'static'
     static int x;
     ^*/
编译错误,在C中的结构体中不能声明static静态变量。
再看看C++中的代码:
// C++ program with structure static member
 
struct Record
{
    static int x;
};
 
// Driver program
int main()
{
    return 0;
}

5、sizeof运算符:该运算符将为C中的空结构生成0,而在C ++中为空结构生成1
// C program to illustrate empty structure
#include<stdio.h>
 
//empty structure
struct Record
{
};
 
//Driver program 
int main()
{
    struct Record s;
    printf("%d\n",sizeof(s));
    return 0;
}

输出C:

0

C ++输出:

1
最后两条:
6、数据隐藏: C结构不允许数据隐藏的概念,但在C ++中允许,因为C ++是面向对象的语言,而C不是。
7、访问修饰符: C结构没有访问修饰符,因为这些修饰符不被语言支配。C ++结构可以具有这个概念,因为它在语言中是内置的。





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxw167/article/details/72861437

C语言系列之 字符串压缩算法与结构体初探

清华大学尹成老师、微软全球最具价值专家,带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯、黑客劫持技术、网络安全、加密解密,以及各种精彩的小项目等,非常适合大家学习!
  • 2015年06月26日 10:59

C结构体、C++结构体 和 C++类的区别

C结构体、C++结构体基本相同,C++类主要是方法的实现。 结构体是数据类型的集合 类是数据类型加方法的集合,基本如此,更注重方法。 1.C的结构体和C++结构体的区别 (1) C...
  • u013925378
  • u013925378
  • 2016-06-14 09:34:32
  • 3495

C++的结构体与类的比较0817

有编过程的人的代码,比那些无知的人使用的软件更有价值。先来说说C和C++中结构体的不同 a) C语言中的结构体不能为空,否则会报错 1>d:\myproject\visual studio 201...
  • Zhou_Boss
  • Zhou_Boss
  • 2016-08-17 20:05:17
  • 559

详解C结构体、C++结构体 和 C++类的区别

先来说说C和C++中结构体的不同 a) C语言中的结构体不能为空,否则会报错 1>d:\myproject\visual studio 2013\projects\myc++\main.c(71): ...
  • Loving_Forever_
  • Loving_Forever_
  • 2016-05-23 18:38:06
  • 19257

C++结构体和C++ 类和C结构体比较

c结构体和c++结构体 c结构体只能定义变量,不能定义函数,可以定义函数指针 c++结构体,可以包含函数,能够定义private public protectd,可以从别的类继承,也可以被继承,可以有...
  • u013866845
  • u013866845
  • 2017-05-12 14:46:19
  • 74

C与C++结构体的区别

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等...
  • jxw167
  • jxw167
  • 2017-06-04 21:14:45
  • 442

结构体对齐详解

一、字节对齐的规则: 1、一般设置的对齐方式为1,2,4字节对齐方式。结构的首地址必须是结构内最宽类型的整数倍地址;另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是w...
  • striver1205
  • striver1205
  • 2014-11-17 16:27:19
  • 3246

C++<em>结构体</em>/函数定义转换C#函数定义/<em>结构体</em>

深入理解c指针 时间:2018-3-28 Visual+<em>C%2B%2B</em>+从入门到精通 时间:2018-3...C#与C++数据类型<em>比较</em>及<em>结构体</em>转换 C#调用C/C++动态库,封装各种复杂<em>结构体</em>。 ...
  • 2018年04月03日 00:00

C_结构体和共同体

#include #include struct File{ char*name; int size; //与数组的区别是结构体内的数据长度可能会不一样 }; stru...
  • sunnysu99
  • sunnysu99
  • 2015-02-11 16:33:56
  • 440

Docker Hub最受欢迎的10个镜像

DockerHub上有多少个镜像?哪些基础镜像被引用最多?哪些镜像最受欢迎? 来自CenturyLink实验室博客的一篇文章将为你解答这些问题,文中所有数据均来自2015年8月6日,Docker...
  • wynter_
  • wynter_
  • 2016-09-24 21:30:28
  • 3404
收藏助手
不良信息举报
您举报文章:C与C++结构体的区别
举报原因:
原因补充:

(最多只允许输入30个字)