C与C++的区别2

一、C与C++数据类型的区别
1、C++的结构

1)不再需要 typedef,再定义结构变量时,可以省略struct关键字。
2)成员可以是函数,在成员函数中可以直接访问结构成员,不再需要.或者->,但必须通过结构变量 或结构指针才能调用成员函数。
3)有一些隐藏的成员函数(构造、析构、拷贝构造,复制构造)。
4)可以被继承,可以设置成员的访问权限(面向对象)。

2、C++的联合
1)不再需要 typedef,可以省略 union 关键字。
2)和结构一样。
3)有隐藏的成员函数。

3、C++的枚举
1)不再需要 typedef,可以省略 enum 关键字。
2)使用方法与C一致,但是类型检查更严格,整形变量不能给枚举变量赋值。

4、C++布尔类型
1)C++中有真正的布尔类型,bool、true、false 在C++中是关键字。
2)true、false 在C++中占一个字节,而在C中占4个字节,因为在C中他们是宏(用0,1替换)。

5、C++中的void*
1)C语言中void* 可以与任意类型的指针自动转换(万能指针)。
2)C++中void* 类型的指针不能给其他类型的指针变量赋值,但是其他类型的指针可以给void*赋值
(为了兼容C语言)

void *p;
int* p1 = p; // error
p = p1; // ok
int* ptr = (int*)malloc(4);

C++为什么修改void* ?
为了更安全,C++的类型检查阉割。
C++可以自动识别数据类型(类型重载、模板),对于万能指针的需求不再强烈。

6、C++中的字符串
1)C++中字符串被封装成了string类,也转换成C语言中的字符串。
2)需要包含string头文件,但已经包含在iostream头文件中,属于std名字空间。
3)常见的字符串操作不再需要函数,可以直接使用运算符。
例如strcpy函数可直接用=号

二、C++的内存管理
1、new/delete 分配/释放堆内存的运算符
功能相当于C语言中的malloc/free new 类型;//会自动计算字节数,然后从堆中分配相应的内幕才能,然后返回一个带类型的指针。
delete 指针;//释放堆内存
new/delete 会自动调用类型中关键的函数。
注意:不能与C语言中的malloc/free混用。

2、new[]/delete[];
newp 类型[n];用于为数组分配长度,通过n表示数组长度,如果是类,结构体会自动调用n次构造函数。
delete[]指针:专门释放数组内存,会调用n次构造函数,如果错用delete后果不确定。
new[] 所申请的内存的前4个字节,存储着数组的长度(仅限于自定义类型)。

3、new/delete可能产生错误
1)new/new[]分配内存失败时不会返回NULL指针,而是跑出异常bad_alloc,如果不处理程序就会结束。
2)delete/delete[] 不能重复释放,否则会产生错误
3)delete/delete[] 释放野指针后果不确定,释放空指针是安全的。

malloc/free与new/delete的比较

不同点malloc/freenew/delete
身份函数运算符
参数字节数类型
返回值void*带指针类型的地址
返回值void*带指针类型的地址
析构/构造不调用自动调用
错误返回NULL抛异常

相同点:
1)管理堆内存。
2)不能重复释放。
3)可以释放空指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值