关于C和C++区别的总结

本文深入探讨了C和C++之间的主要差异,包括变量存储位置、struct与class的使用、相互调用规则、new/delete操作、const特性、引用概念及inline函数的应用,为读者提供了全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C和C++区别

1、变量存储位置

  • 初始化且初始化不为0的  static 和 全局变量存储在data段
  • 未初始化或者初始化为0的static 和全局变量存储在bss段
  • 局部变量在栈上
  • new或者malloc申请的内存在堆上

2、struct和class的区别

  • C语言中struct不可以为空,c++可以且大小为1
  • C语言中struct仅仅是结构体,不可以包涵成员方法,c++中struct和class类似
  • c++中class内的成员默认为private,struc中成员默认为public
  • struct不可用来做模板
  • struct可以使用{}聚合类型方式赋值,class不可以

3、c++和C相互调用

  • c++调用C语言使用extern ”C” 修饰函数声明
  • C语言调用c++,如果可以改动源码,可以在c++源码中加上extern ”C”,让c++代码使用C语言编译规则
  • 如果不可以改动源码,需要使用一个中间的c++函数封装,并且使用extern ”C”,让他按照C语言规则编译

4、new和delete

  • new 申请内存   调用构造函数
  • delete 调用析构函数  释放内存

5、const

  • C语言中的const量是常变量(不可作为左值),c++中是常量(不可修改)
  • c++中的常量必须初始化
  • 常量在编译期自动替换为常量的值,所以常量不产生符号,仅本文件可见。常变量在使用的时候依然依赖地址寻址确认值,数据常变量已然产生local符号,仅本文件可见

6、引用(指针和引用的区别)

  • 引用相当于被引用量的别名,指代同一个量
  • 引用底层使用指针实现,虽然无法查看,但是底层也占用4字节空间
  • 引用底层是* const 的指针,必须初始化,而且一旦初始化,后期无法改变引用的指向
  • 引用在调用处自动使用指针的截引用进行替换,所以永远无法访问到引用自己的真实内存,所以引用一声=生只能引用一个量

7、inline

  • inline关键字修饰的函数为内联函数,是对系统的建议,并不绝对保证其处理为内联
  • 内联函数编译期在函数调用点展开
  • 内联函数不产生符号,仅本文件可见
  • 递归,循环等函数结构不可能被处理为内联
### C语言C++语法的主要区别 #### 1. 面向对象的支持 C++ 是一种支持面向对象编程的语言,而 C 语言则不支持这种编程范式。C++ 提供了类继承的概念,使程序设计更加模块化易于维护。相比之下,C 语言仅支持过程化的函数调用方式[^1]。 #### 2. 数据类型的扩展 C++ 扩展了许多数据类型的功能,比如引入了 `bool` 类型以及内置的布尔值常量 `true` `false`。而在 C 中,则通常通过整数来模拟布尔逻辑运算的结果[^2]。 #### 3. 函数重载与默认参数 C++ 支持函数重载(即多个同名但形参列表不同的函数),同时也允许定义带有默认参数值的函数。这些特性在标准 C 中均不可用,在 C 中如果要实现类似功能往往需要借助宏或者额外的函数声明。 #### 4. 命名空间 (Namespace) 为了减少全局作用域污染并提高代码可读性安全性,C++ 引入了命名空间机制;然而这是 C++ 特有的概念,并不存在于传统 C 编程环境当中[^1]。 #### 5. 输入/输出流 不同于 printf() scanf(), C++ 使用 iostream 库来进行输入输出操作, 这种方法不仅更安全而且更具灵活性因为可以轻松处理复杂的数据结构如字符串等. 以下是两个简单例子展示两者如何完成基本打印任务: ```cpp // C++ Example using cout from <iostream> #include <iostream> int main(){ std::cout << "Hello World!" ; } ``` ```c // C Example using printf() #include<stdio.h> int main(){ printf("Hello world!"); } ``` #### 6. 动态内存管理 虽然两者都具备动态分配内存的能力(C via malloc/free; C++via new/delete),但在实际应用过程中发现后者更为直观易懂些因为它不需要显式的指针算术计算大小信息等等[^2]. --- ### 总结 综上所述,C++ 可视为对原始版C 的全面升级版本——除了保留原有全部特性的基础上还增加了许多现代化的新特性使其更适合构建大型复杂的软件项目.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值