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

585 0
Honkers 2025-3-28 04:50:45 | 显示全部楼层 |阅读模式

        有些初学的同学傻傻分不清其中的区别,下面我将详细的讲解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,不接收任何参数。

缺省参数

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

如下代码:

  1. #include
  2. using namespace std;
  3. void test(int a = 1)
  4. {
  5. cout
  6. }
  7. int main()
  8. {
  9. test();
  10. test(10);//输出的结果是1
  11. return 0;//函数输出结果是10
  12. }
复制代码

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

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

代码示例:

  1. #include
  2. using namespace std;
  3. void test(int a = 1,int b = 2, int c = 3)
  4. {
  5. cout
  6. }
  7. int main()
  8. {
  9. test();//1 2 3
  10. test(10);//10 2 3
  11. test(10, 20);//10 20 3
  12. test(10, 20, 30);//10 20 30
  13. return 0;
  14. }
复制代码

半缺省参数代码演示:

  1. void test(int a ,int b = 2, int c = 3)
  2. {
  3. cout
  4. }
  5. void test1(int a, int b, int c = 3)
  6. {
  7. cout
  8. }
复制代码

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

        注意:

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

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

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

        C语言并不支持缺省。

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

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

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

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

  1. void swap1(int *a, int *b); //交换 int 变量的值
  2. void swap2(float *a, float *b); //交换 float 变量的值
  3. void swap3(char *a, char *b); //交换 char 变量的值
  4. void swap4(bool *a, bool *b); //交换 bool 变量的值
复制代码

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

C/C++

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

  1. #include
  2. using namespace std;
  3. //交换 int 变量的值
  4. void Swap(int *a, int *b){
  5. int temp = *a;
  6. *a = *b;
  7. *b = temp;
  8. }
  9. //交换 float 变量的值
  10. void Swap(float *a, float *b){
  11. float temp = *a;
  12. *a = *b;
  13. *b = temp;
  14. }
  15. //交换 char 变量的值
  16. void Swap(char *a, char *b){
  17. char temp = *a;
  18. *a = *b;
  19. *b = temp;
  20. }
  21. //交换 bool 变量的值
  22. void Swap(bool *a, bool *b){
  23. char temp = *a;
  24. *a = *b;
  25. *b = temp;
  26. }
  27. int main(){
  28. //交换 int 变量的值
  29. int n1 = 100, n2 = 200;
  30. Swap(&n1, &n2);
  31. cout
  32. //交换 float 变量的值
  33. float f1 = 12.5, f2 = 56.93;
  34. Swap(&f1, &f2);
  35. cout
  36. //交换 char 变量的值
  37. char c1 = 'A', c2 = 'B';
  38. Swap(&c1, &c2);
  39. cout
  40. //交换 bool 变量的值
  41. bool b1 = false, b2 = true;
  42. Swap(&b1, &b2);
  43. cout
  44. return 0;
  45. }
复制代码

运行结果:

200, 100

56.93, 12.5

B, A

1, 0

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

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

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

        函数的重载的规则:

        函数名称必须相同。

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

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

6、指针和引用

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

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

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

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

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

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

int &num1=num0;

引用特性;

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

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

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

//指针和引用的区别

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

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

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

7、命名空间

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

8、输入与输出

cout代表c++的输出流

cin代表c++的输入流

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

“cout”必须与”

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

  1. cout
  2. #include
  3. using namespace std;
  4. int main()
  5. {
  6. int a,b;
  7. cout
  8. cin>>a>>b;
  9. cout
  10. return 0;
  11. }
复制代码

然后今天就讲到这里啦,大家记得点赞收藏,分享转发,关注小哥哥哦! 最后,如果你想学或者正在学C/C++编程,可以加入小编的编程学习C/C++企鹅圈

https://jq.qq.com/?_wv=1027&k=vLNylJeG

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行