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

2023-05-16

有些初学的同学傻傻分不清其中的区别,下面我将详细的讲解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++高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • SAP查看SPRO配置对应的事务码

    在SPRO里面 xff0c 选中配置项 xff0c 然后点击菜单 编辑 显示IMG活动 在显示实施指南活动 xff1a 已分配对象 维护对象 里面 xff0c 点维护对象 xff0c 找到定制对象 xff0c 就可以查看对应的事务码 但是不
  • 分卷压缩与解压缩

    分卷压缩命令格式 tar lt args gt lt filedir gt split d b lt size gt lt compress filename gt xff0c 意思是将 lt filedir gt 分卷压缩 xff0c 每
  • 27 RGB值 1颜色单位 2RGB 3用浓度表示颜色

    xff11 xff12 xff13 转载于 https www cnblogs com anvivi p 9703677 html
  • SAP有用的知识(持续更新)

    一 安装SAP 1 1 产品可用性矩阵 xff08 Product Availability Matrix xff09 SAP官网 Maintenance Product Availability Matrix xff0c 点击页面的Acc
  • ORA-01113 file 1 needs media recovery

    启动数据库时报错 ORA 01113 datafile1需要恢复 rman执行恢复 恢复后尝试打开数据库 xff0c 看结果 rman target recover datafile 1 alter database open 反复上述过程
  • 网络管理员比赛回顾01-基本操作和简单vlan

    目录 一 模拟器eNSP 二 基本操作 三 配置IP地址 四 VLAN 一 模拟器eNSP 使用eNSP模拟器 xff0c 来源于网络上的安装包 xff0c 学习一个 基本操作就不多说了 xff0c 在实践里慢慢记录 二 基本操作 认识3种
  • SAP有用的NOTE(持续更新)

    目录 2421240 Portal is not loaded on Chrome 56 or higher 66971 Supported SAP GUI platforms 66971 Supported SAP GUI platfor
  • 网络管理员比赛回顾02-网关、静态路由、动态路由

    目录 一 配置网关 二 配置静态路由 三 配置动态路由 3 1 使用RIP协议配置动态路由 3 2 使用OSPF协议配置动态路由 2021年9月参加青年网络管理员比赛 xff0c 因为网管超龄不能按照 青年 参赛 xff0c 临时培训我们这
  • 网络管理员比赛回顾03-单臂路由

    三层交换机sw1配置 xff0c 划分三个vlan xff0c 3个接入端口分别允许各自vlan通过 xff0c 一个骨干端口允许所有vlan通过 lt Huawei gt undo terminal monitor lt Huawei g
  • SAP创建webservice

    目录 一 创建webservice 二 更改webservice 三 SoapUI测试webservice 四 查看webservice日志及排错 一 创建webservice 以用户相关的函数User为例创建webservice xff0
  • SAP事务码f-02做账界面显示“页数”字段

    事务码 f 02 做账界面 xff0c 没有显示页数 用户账号的参数添加 CSF xff08 Country Specific Fields xff09 参数 xff0c 参数值为 CN xff08 伟大的China xff09 再次来到
  • 网络管理员比赛回顾04-DHCP

    目录 一 DHCP的配置 二 DHCP中继 2021年9月参加青年网络管理员比赛 xff0c 因为网管超龄不能按照 青年 参赛 xff0c 临时培训我们这批 青年 参赛 xff0c 回顾一下经过以及学到的技能 本节回顾DHCP 一 DHCP
  • SNMP服务配置

    由于服务器账号密码要定期更改 xff0c 监控服务器一般不应使用可登录的账号 xff0c 而应该使用SNMP协议获取服务器信息 记录一下CentOS 7配置SNMPv3服务的过程 安装SNMP服务 yum install net snmp
  • zabbix-agent安装

    最近新上了zabbix监控 xff0c 记录部署过程 一 Linux上安装 修改yum源配置 vim etc yum repos d lt your repo gt zabbix name 61 zabbix baseurl 61 http
  • SublimeText + Anaconda插件 打造 Python IDE

    目录 一 安装anaconda插件 二 创建构建环境 三 快捷键 自己尝试了SublimeText 43 Anaconda插件 xff0c 打造 Python IDE的方案是可行的 xff0c 记录配置过程 安装SublimeText的过程
  • 在Ubuntu22.4下搭建pytorch深度学习环境

    Anacnda安装 xff1a 这个在其他地方搜索 xff0c 可以搜到参考oknacUbuntu下安装Anaconda的步骤 xff08 带图 xff09 知乎 安装完毕source bashrc进入base环境 xff0c conda
  • leetcode算法题-两数之和

    解法一 xff1a 哈希表 class Solution def twoSum self nums List int target int gt List int hashmap 61 for ind num in enumerate nu
  • python 求列表中出现频率最高的元素

    def count l1 list return max set l1 key l1 count max set list key 61 list count 函数会根据关键词参数key 61 list count所指定带有一个参数的函数
  • 算法python回文数数学法

    class Solution def isPalindrome self x int gt bool if x lt 0 or x 10 61 61 0 and x 61 0 return False y 61 0 t 61 x while
  • MapReduce程序开发

    通过API操作之前要先了解几个基本知识 基本数据类型 Hadoop的基本数据类型和Java的基本数据类型是不一样的 xff0c 但是都存在对应的关系 如下图 如果需要定义自己的数据类型 xff0c 则必须实现Writable hadoop的

随机推荐

  • Jetson AGX Xavier 配置VNC远程桌面连接及默认分辨率调整

    Jetson AGX Xavier 配置VNC远程桌面连接及默认分辨率调整 Jetson AGX Xavier 配置VNC远程桌面连接安装VNC Server配置VNC Server把VNC Server设为开机自启动设置VNC Serve
  • frp内网穿透windows配置开机启动

    首先下载我们需要的frp软件包 点我即可跳转下载页 解压之后得到我们的文件夹 xff0c 降不需要的frps开投的文件删掉 xff0c 新建文本 start bat start bat内容如下 xff1a 64 echo off home
  • kube-flannel.yml 保存

    apiVersion policy v1beta1 kind PodSecurityPolicy metadata name psp flannel unprivileged annotations seccomp security alp
  • 【VHDL语言学习笔记(三)】 数据比较器

    目的 xff1a 实现一个4位二进数据比较器 分析 xff1a 两个操作数的比较有三种结果 xff0c 即A等于B xff0c A大于B和A小于B 两个4位二进制比较器 xff0c 构建比较器表如下 比较器的真值表 输入输出ABAGQBAG
  • 【天光学术】论文写作技巧,教你论文写作提纲撰写方法

    1 拟订提纲的必要性盖楼首先要设计工程蓝图 xff0c 然后按图施工 同理 xff0c 撰写论文首先要拟订写作提纲 xff0c 然后按纲行文 简单地说 xff0c 写作提纲就是整篇文章的总体思路 逻辑图表和结构框架 在动笔撰写论文之前 xf
  • HTTP协议详解

    文章目录 一 HTTP工作过程二 HTTP 协议格式2 1 请求 Request 格式2 1 1 URL格式2 1 2 方法 method 2 1 2 1 GET 方法2 1 2 2 POST 方法2 1 2 3 GET vs POST 2
  • yum安装指定版本docker

    步骤1 xff1a 删除docker等相关依赖 yum remove docker docker common container selinux docker selinux docker engine 步骤2 设置稳定镜像源 xff1a
  • vue学习总结一(环境部署,项目搭建开发)

    小白vue学习总结 xff0c 阅者酌情参考 xff0c 欢迎指正 一 安装环境 安装nodejs xff1a 查看版本 node v加载vue组件 xff1a npm install vue搭建vue的开发环境 xff0c 安装vue的脚
  • springboot--集成jdbctemplate

    springboot 集成jdbctemplate 添加依赖 lt 引入jdbc支持x gt lt dependency gt lt groupId gt org springframework boot lt groupId gt lt
  • springboot--集成jpa

    比较 表列出了JPA与其他持久化技术的比较 添加依赖 lt 引入jpa 依赖 gt lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artif
  • SpringMVC集成Quartz2.3.2

    SpringMVC集成Quartz2 3 2 集成Quartz持久化下载jar导入jar包配置properties配置xml数据源导入数据表xml配置中用到的工厂类自定义JobController层Service层jsp参考 集成Quart
  • vagrant学习总结

    一 vagrant是什么 vagrant是一款用来构建虚拟开发环境的工具 xff0c 非常适合各类语言来开发web应用 xff0c 代码在我机器上运行没有问题 将成为历史 可以通过vagrant将封装好的开发环境 xff0c 分发给开发人员
  • cas5.3.5错误锦集

    0 cas jar https repo maven apache org maven2 org apereo cas 1 票根 39 ST 7 yOPMHIBFVcx8iNRoDW rCzNgakLAPTOP E2N0LMKU 39 不符
  • 面向对象分析:如何建立动态模型?状态图(单个对象建模),状态是对影响对象行为的属性值的一种抽象,它规定了对象对( 输入事件 )的响应方式,

    对象模型建立后 就需要考察对象和关系的动态变化情况 面向对象分析设定对象和关系都具有生命周期 生命周期由许多阶段组成 每个阶段都有一系列的运行规律和规则 用来调节和管理对象的行为 对象和关系的生命周期用动态模型来描述 动态模型描述对象和关系
  • 信息系统项目管理师-信息文档与配置管理考点笔记

    历年考点分布 注 xff1a 博客 xff1a https blog csdn net badao liumang qizhi 关注公众号 霸道的程序猿 获取编程相关电子书 教程推送与免费下载 信息系统项目文档及其管理 软件文档的分类 3
  • new 对象加括号和不加括号的区别

    在new对象的时候有加上 xff0c 有不加 xff0c 不知道这个到底是什么区别 xff1f 比如 xff1a cpp view plain copy print CBase base 61 new CDerived CBase base
  • 结构程序设计的经典定义

    结构程序设计的经典定义如下所述 xff1a 如果一个程序的 代码块仅仅通过顺序 选择和循环这3种基本控制结构 进行连接 xff0c 并且每个代码块只有一个入口和一个出口 xff0c 则称这个程序是结构化的 如果只允许使用顺序 IF THEN
  • 总体设计启发性规则7条

    nbsp 启发性规则 7条 1 改进软件结构提高模块独立性 通过模块分解或合并 降低耦 合提高内聚 2 模块规模应该适中 过大的模块往往是由于分解不充分 过小 的模块将导致模块数目过多将使系统接口复杂 3 深度 宽度 扇出和扇入都应适当 深
  • SqlServer调用webapi和webService接口

    1 通过http协议post调用webapi接口 xff08 json数据格式 xff09 declare 64 ServiceUrl as varchar 1000 set 64 ServiceUrl 61 39 http 127 0 0
  • C语言和C++的区别是什么?8个点通俗易懂的告诉你

    有些初学的同学傻傻分不清其中的区别 xff0c 下面我将详细的讲解C语言和C 43 43 的区别点 帮助大家尽快的理解 1 关键字 蓝色标注为C语言关键字 xff0c C 43 43 继承了C语言的所有关键字 xff0c 以下红色标注为C