优秀的编程知识分享平台

网站首页 > 技术文章 正文

C语言跟C++有什么区别?(c语言和c++什么区别)

nanyue 2024-08-19 19:08:18 技术文章 7 ℃

c语言是面向面向过程的程序设计:数据结构+算法,c语言的目的是高效

c++是面向对象的程序设计:由现实世界建立软件模型

c++比c加强的点:

1.引入命名空间

一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。

命名空间将全局作用域分成不同的部分

不同命名空间中的标识符可以同名而不会发生冲突

命名空间可以相互嵌套

全局作用域也叫默认命名空间

2.实用性加强

C语言中的变量都必须在作用域开始的位置定义!

C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。

例如: for (int i = 0; i < 10; i++)

3.register关键字

register关键字请求“编译器”将局部变量存储于寄存器中

C语言中无法取得register变量地址

在C++中依然支持register关键字

C++编译器有自己的优化方式,不使用register也可能做优化

C++中可以取得register变量的地址

C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

4.变量监测加强

在C语言中重复定义多个全局变量是合法的

这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上

在C语言中只有一个全局作用域

C语言中所有的全局标识符共享同一个作用域

标识符之间可能发生冲突

在C++中不允许定义多个同名的全局变量

5.struct类型加强

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型

C++中的struct是一个新类型的定义声明

C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型

所以在定义变量的时候需要在前面加上 struct 关键字进行修饰

C++中 struct 定义了一种新的数据类型,可以直接用来定义变量

6.c++中所有变量和函数都必须要有数据类型

c语言:

//1 函数可以没有返回参数类型
f()
{
 printf ("hello world\n");
}
 
//2 函数参数可以没有数据类型
g(i)
{
 return i;
}
 
int main()
{
// 3 没有参数的函数可以接收任意个参数
 f(1,2,3,4,5);
 
 g(12,15);
 
 return 0;
}

c++加强

在C语言中

 int f( );表示返回值为int,接受任意参数的函数
 int f(void);表示返回值为int的无参函数

在C++中

 int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数

C++更加强调类型,任意的程序元素都必须显示指明类型

7.新增bool类型关键字

C++中的布尔类型

C++在C语言的基本类型系统之上增加了bool

C++中的bool可取的值只有true和false

理论上bool只占用一个字节,

如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现

true代表真值,编译器内部用1来表示

false代表非真值,编译器内部用0来表示

bool类型只有true(非0)和false(0)两个值

C++编译器会在赋值时将非0值转换为true,0值转换为false

8.三目运算符的加强

1)C语言返回变量的值 C++语言是返回变量本身

C语言中的三目运算符返回的是变量值,不能作为左值使用

C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方

2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

(a < b ? 1 : b )= 30;

3)C语言如何支持类似C++的特性呢?

====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已

C++语言对C语言的扩充

(1)数据的输入输出

c语言的输入与输出

——输入/输出函数,例如scanf,printf等

——头文件:#include<stdio.h>

c++的输入与输出

——将提供输入数据的数据源称作输入数据流

——将输出数据时的目的地称作输出数据流

——输入数据流和输出数据流统称为输入/输出流

标准输入/输出流

——键盘(cin),显示器(cout)

——相关声明语句

#include<iostream> //标准输入输出流的头文件

using namespace std; //声明命名空间std

(2)变量的初始化及常量

变量的初始化

int x=10,y;//c语言风格

int x(10),y;//c++语言风格

(3)引用及函数间参数的引用传递

访问变量内存单元

int x=100;

——变量名访问:cout<<x;

——指针访问:int *p; p=&x; cout<<(*p);

——C++新增了引用访问

引用:已有变量的别名

int &xa=x; cout<<xa;

(4)几种特殊形式的函数

——带默认形参值的函数

——重载函数

——内联函数(适用于频繁调用的简单函数)

(5)命名空间

——访问命名空间中的函数和全局变量

(6)动态内存分配

c语言:

——分配内存:malloc函数

——释放内存:free函数

c++:

——分配内存:new运算符

——释放内存:delete运算符

学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C语言或者有兴趣学习C语言的伙伴可以私信回复小编“学习”领取全套免费C语言学习资料、视频

最近发表
标签列表