C语言和C++的区别是什么?8个点通俗易懂的告诉你

17 篇文章 0 订阅
17 篇文章 0 订阅

有些初学的同学傻傻分不清其中的区别,下面我将详细的讲解C语言和C++的区别点。帮助大家尽快的理解。

1、关键字

蓝色标注为C语言关键字,C++继承了C语言的所有关键字,以下红色标注为C++中含有但C语言没有的关键字(根据c++98中提出C++包含63个关键字)

2、源文件区别

C语言文件后缀为.c,c++原文件名后缀为.cpp

如果在创建源文件时什么都不给,默认是.cpp

3.返回值不同

C语言中,如果一个函数没有指定返回值类型,默认为int类型,并返回一个随机数,一般为0XCCCCCCCC

在C++中,如果函数没有返回值则必须指定为void型,否则编译不能通过

4、参数列表

在C语言中,函数没有指定的参数列表时,默认可接收任意多个参数

在C++中,有严格的参数类型检测,没有参数列表的函数,默认为void,不接收任何参数。

缺省参数

缺省参数是声明和定义时函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用默认值,否则使用指定的实参。

如下代码:

#include<iostream>

using namespace std;

void test(int a = 1)

{

    cout << a << endl;

}

int main()

{

    test();

    test(10);//输出的结果是1

    return 0;//函数输出结果是10

}

C语言
而缺省参数是分为两类的,一类是全缺省,一类是半缺省。

首先是全缺省,全缺省参数所有参数都有默认值,如果没有手动传参,那么编译器会使用默认参数列表中的参数。但是这里值得注意的是,如果传参的时候只传了部分参数,那么该值会被从左至右匹配。

代码示例:

#include<iostream>

using namespace std;

void test(int a = 1,int b = 2, int c = 3)

{

    cout << a << " " << b << " " << c << endl;

}

int main()

{

    test();//1 2 3

    test(10);//10 2 3

    test(10, 20);//10 20 3

    test(10, 20, 30);//10 20 30

    return 0;

}

半缺省参数代码演示:

void test(int a ,int b = 2, int c = 3)

{

    cout << a << " " << b << " " << c << endl;

}

void test1(int a, int b, int c = 3)

{

    cout << a << " " << b << " " << c << endl;

}

其中test函数至少传一个参数,test1函数至少传两个参数,函数才可以正常运行。

注意:

带缺省值的参数必须放在参数列表的最后面。因为传参是从右向左的。

缺省参数不能同时在函数声明和定义中出现,只能二者留其一。

缺省值必须是常量或者全局变量。

C语言并不支持缺省。

5、C++支持函数重载,C语言不支持

在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。

例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。

在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:

void swap1(int *a, int *b); //交换 int 变量的值

void swap2(float *a, float *b); //交换 float 变量的值

void swap3(char *a, char *b); //交换 char 变量的值

void swap4(bool *a, bool *b); //交换 bool 变量的值

但在C++中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。

C语言

参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

#include <iostream>

using namespace std;

//交换 int 变量的值

void Swap(int *a, int *b){

int temp = *a;

*a = *b;

*b = temp;

}

//交换 float 变量的值

void Swap(float *a, float *b){

float temp = *a;

*a = *b;

*b = temp;

}

//交换 char 变量的值

void Swap(char *a, char *b){

char temp = *a;

*a = *b;

*b = temp;

}

//交换 bool 变量的值

void Swap(bool *a, bool *b){

char temp = *a;

*a = *b;

*b = temp;

}

int main(){

//交换 int 变量的值

int n1 = 100, n2 = 200;

Swap(&n1, &n2);

cout<<n1<<", "<<n2<<endl;

//交换 float 变量的值

float f1 = 12.5, f2 = 56.93;

Swap(&f1, &f2);

cout<<f1<<", "<<f2<<endl;

//交换 char 变量的值

char c1 = 'A', c2 = 'B';

Swap(&c1, &c2);

cout<<c1<<", "<<c2<<endl;

//交换 bool 变量的值

bool b1 = false, b2 = true;

Swap(&b1, &b2);

cout<<b1<<", "<<b2<<endl;

return 0;

}

运行结果: 

200, 100 

56.93, 12.5 

B, A 

1, 0

重载就是在一个作用范围内(同一个类、同一个命名空间等)有多个名称相同但参数不同的函数。重载的结果是让一个函数名拥有了多种用途,使得命名更加方便(在中大型项目中,给变量、函数、类起名字是一件让人苦恼的问题),调用更加灵活。

在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人觉得莫名其妙。

注意,参数列表不同包括参数的个数不同、类型不同或顺序不同,仅仅参数名称不同是不可以的。函数返回值也不能作为重载的依据。

函数的重载的规则:

函数名称必须相同。

函数的返回类型可以相同也可以不相同。

仅仅返回类型不同不足以成为函数的重载。

C语言

6、指针和引用

C语言中函数传参方式有两种:传值和传址

以传值方式,在函数调用过程中会生成一份临时变量用形参代替,最终把实参的值传递给新分配的临时形参。

它的优点是避免了函数调用的副作用,却无法改变形参的值。如果要改变实参的值,只能通过指针传递。

指针可以解决问题,但是不安全,因此在C++中引入了引用。

引用:引用不是新定义的一个变量,他是原变量的一个别名,编译器不会为引用变量开辟空间,它和他引用的变量共用同一块内存空间。

类型& 变量(对象名)=引用变量

int &num1=num0;

引用特性;

1、引用定义时必须初始化

2、一个变量可以有多个引用

3、引用一旦绑定一个实体就不能改变为其他变量的引用

//指针和引用的区别

引用不可以为空,但指针可以为空

引用不可以改变指向,对一个对象”至死不渝”;但是指针可以改变指向,而指向其它对象

引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。

7、命名空间

在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或者名字污染,namespace关键字的出现就是解决这种问题。而C语言中没有。

8、输入与输出

cout代表c++的输出流

cin代表c++的输入流

它们都是在头文件“iostream”中定义。

“cout”必须与”<<”一起使用,“<<”起到插入的作用。

在一条语句中可以多次使用“<<”输出多个数据。

如:cout<

#include <iostream>

using namespace std;

int main()

{

int a,b;

cout<<"请输入a,b的值"<<endl;

cin>>a>>b;

cout<<"输出a的值"<<a<<"输出b的值"<<b<<endl;

return 0;

}

加C/C++学习交流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,大型企业实战项目。Linux应用程序开发,Linux内核研究等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群…号是 546912356
注:加群要求
1、零基础,目前遇到困难不知从何下手可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、基础非常扎实,但对目前主流技术欠缺,需要突破技术瓶颈的可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.企业一线C/C++高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

  • 17
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回调函数是指在编程中,我们将一个函数作为参数传递给另一个函数,并在另一个函数执行完成后,通过调用该函数来完成一些特定的操作。简单来说,回调函数就是在某个事件触发后,执行的用户自定义的函数。 通俗地解释,可以想象你在餐厅点餐,你告诉服务员你要的菜品和口味。然后,你可以继续和朋友聊天,等待服务员将菜品做好后通知你,而不需要你一直等待。这里,你点餐并告诉服务员你的口味的过程就相当于设置了一个回调函数,当菜品做好后,服务员会调用你设置的回调函数来通知你。 在编程中,回调函数常常用于处理异步操作,比如网络请求、文件读写等。当这些操作完成后,系统会调用预先设置好的回调函数来处理操作的结果。这样可以提高程序的灵活性和性能。 回调函数的好处在于可以将程序分成多个模块,每个模块只关注自己的功能,而不需要关心其他模块的具体实现。同时,回调函数也可以根据不同的需求,灵活地进行扩展和定制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [回调函数传参c++_C语言回调和钩子函数嘛玩意?看这文章,回调和钩子函数一眼会...](https://blog.csdn.net/weixin_39913141/article/details/109962266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值