C,C+和C++它们有什么区别

只有C语言和C++语言,没有C+语言。

1、出现时间不同
C++是C的超集,也可以说C是C++的子集,因为C先出现。按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。

例如C++增加了C不具有的关键字。这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。

2、C程序可以省略函数原型,而C++不可以

一个不带参数的C函数原型必须把void写出来。而C++可以使用空参数列表。C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数(C中没有字符串类型)。

C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。

3、关键字和变量不同

在C++中还增加了bool型变量和wchar_t型变量:布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量。

那么将根据变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔型变量,如果整型值为0,则其布尔型值为假;反之如果整型值为非0,则其布尔型值为真。布儿型变量在运行时通常用做标志,比如进行逻辑测试以改变程序流程。

C++中还包括wchar_tt数据类型,wchar_t也是字符类型,但是是那些宽度超过8位的数据类型。许多外文字符集所含的数目超过256个,char字符类型无法完全囊括。wchar_t数据类型一般为16位。

标准C++的iostream类库中包括了可以支持宽字符的类和对象。用wout替代cout即可。

4、强制类型转换不同

有时候,根据表达式的需要,某个数据需要被当成另外的数据类型来处理,这时,就需要强制编译器把变量或常数由声明时的类型转换成需要的类型。为此,就要使用强制类型转换说明,格式如下:int iptr=(int) &table;

表达式的前缀(int*)就是传统C风格的强制类型转换说明(typecast),又可称为强制转换说明(cast)。强制转换说明告诉编译器把表达式转换成指定的类型。

有些情况下强制转换是禁用的,例如不能把一个结构类型转换成其他任何类型。数字类型和数字类型、指针和指针之间可以相互转换。当然,数字类型和指针类型也可以相互转换,但通常认为这样做是不安全而且也是没必要的。强制类型转换可以避免编译器的警告。

5、函数重载

在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。

参考资料来源:百度百科-C++

C语言C++在指针上的主要区别在于: 1. **NULLnullptr**[^1]: - C语言中,`NULL` 是一个预定义的宏常量,通常等于整数 `0`,用来表示空指针。 ```c #define NULL 0 ``` - C++ 中引入了 `nullptr` 关键字,它是一个编译时常量,类型为 `std::nullptr_t`,更明确地表示空指针。 ```cpp nullptr // 类型 std::nullptr_t,相当于 C++11 之后的 nullptr 或 C++14+ 的 nullptr_t ``` 2. **操作符优先级不同**: - C语言中的解引用操作 `*` 具有较低的运算符优先级,可能需要额外的圆括号来确保正确的解析。 ```c (*p) * 2; // 注意这里需要括号 ``` - C++ 中,`*` 操作符的优先级较高,因此通常不需要额外的括号。 3. **默认初始化**: - C++ 指针默认不初始化为NULL(对于自动类型,它们实际上是未定义的),而在 C 语言中,如果忘记初始化指针,其值通常是不确定的。 ```cpp int* p; // C++ 默认未初始化,可以安全地检测为 nullptr int* q; // C 语言中,q 可能是任意地址 ``` 4. **类型安全性**: - C++ 的 nullptr 提供了更好的类型安全性清晰性,避免了误将其他类型的值当作指针的情况。 - C 语言的 NULL 只能明确表示 null 指针,但不能区分空指针非空指针类型。 5. **NULL/nullptr 的使用场景**: - C 语言中,`NULL` 更多地用于标识空指针,尤其是当使用 C API 时。 - C++ 除了标识空指针,`nullptr` 还可以用作条件语句中的表达式,增加代码可读性。 相关问题-- 1. C++中为什么引入nullptr关键字? 2. 如何在C++中防止意外使用NULL作为有效指针? 3. C语言中的指针何时会自动初始化?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值