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 ++结构可以具有这个概念,因为它在语言中是内置的。





版权声明:本文为博主原创文章,未经博主允许不得转载。

详解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
  • 17199

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

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

C与C++结构体的区别

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

C语言中的结构体与C++中的类异同

C语言中的结构体与C++中的类异同
  • rl529014
  • rl529014
  • 2015年09月02日 09:37
  • 1440

C语言共用体和与结构体的区别

共用体与结构体的区别共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址结构体大小: 结构体内部的成员,大小等于最后一...
  • liuzp111
  • liuzp111
  • 2016年12月21日 22:58
  • 1249

结构体和共同体

结构体和共同体一、结构体的定义1、结构体的应用环境结构体适用用是将不同类型的数据成员组合到一起,适用于关系紧密和逻辑相关的数据进行处理; 与共同体相比较而言,共同体虽然也能表示不同类型数据的数据集合...
  • depers15
  • depers15
  • 2016年06月29日 14:08
  • 923

C语言之结构体和共同体——结构体的定义和使用

在实际问题中,一组数据往往具有不同的数据类型;例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能用一个数组来存放。 在C...
  • jasonzzj
  • jasonzzj
  • 2015年12月15日 21:47
  • 2576

结构体与联合体的区别

共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 ------...
  • keyue123
  • keyue123
  • 2013年11月21日 10:39
  • 1078

枚举,结构体区别

枚举enun       enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默...
  • qq_18884827
  • qq_18884827
  • 2016年09月06日 15:21
  • 1340

C++ 结构体struct和共同体union的区别

 //联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄一、概念1.定义:  结构体struct:把不同类型的数据组合成一个整体,自定义类型。  共同体union: 使几个不同类型的变量共同...
  • shihuboke
  • shihuboke
  • 2018年02月10日 10:31
  • 21
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C与C++结构体的区别
举报原因:
原因补充:

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