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

有些初学的同学傻傻分不清其中的区别,下面我将详细的讲解C语言和C++的区别点帮助大家尽快的理解。(但是呢,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

using namespace std;

void test(int a = 1)

{

cout

}

int main()

{

test();

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

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

}

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

首先是全缺省,全缺省参数所有参数都有默认值,如果没有手动传参,那么编译器会使用默认参数列表中的参数。但是这里值得注意的是,如果传参的时候只传了部分参数,那么该值会被从左至右匹配。“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++、编程爱好者的聚集地就在我这里<C语言C++编程学习>!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。

代码示例:

#include

using namespace std;

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

{

cout

}

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;

}

C/C++

半缺省参数代码演示:

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

{

cout

}

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

{

cout

}

其中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)。借助重载,一个函数名可以有多种用途。

need-to-insert-img

每天晚上20:00都会开直播给大家分享C/C++游戏编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法,最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实

C/C++

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

#include

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(&amp;n1, &amp;n2);

cout

//交换 float 变量的值

float f1 = 12.5, f2 = 56.93;

Swap(&amp;f1, &amp;f2);

cout

//交换 char 变量的值

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

Swap(&amp;c1, &amp;c2);

cout

//交换 bool 变量的值

bool b1 = false, b2 = true;

Swap(&amp;b1, &amp;b2);

cout

return 0;

}

运行结果:

200, 100

56.93, 12.5

B, A

1, 0

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

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

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

函数的重载的规则:

函数名称必须相同。

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

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

need-to-insert-img

C/C++

6、指针和引用

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

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

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

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

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

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

int &amp;num1=num0;

引用特性;

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

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

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

//指针和引用的区别

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

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

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

7、命名空间

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

8、输入与输出

cout代表c++的输出流

cin代表c++的输入流

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

“cout”必须与”

在一条语句中可以多次使用“

如:cout

#include

using namespace std;

int main()

{

int a,b;

cout

cin&gt;&gt;a&gt;&gt;b;

cout

return 0;

}


“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++、编程爱好者的聚集地就在我这里,<C语言C++编程学习>!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”

关注我和我的专栏,带你遨游代码世界! C语言/C++进阶之路 - 专题 - 简书

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容