当前位置: 首页 > news >正文

C++学习Day01之C++对C语言增强和扩展

目录

  • 一、程序及输出
    • 1.1 全局变量检测增强
    • 1.2 函数检测增强
    • 1.3 类型转换检测增强
    • 1.4 struct增强
    • 1.5 bool类型扩展
    • 1.6 三目运算符增强
    • 1.7 const增强
      • 1.7.1 全局Const对比
      • 1.7.2 局部Const对比
      • 1.7.3 Const变量初始化数组
      • 1.7.3 Const修饰变量的链接性
  • 二、分析总结


一、程序及输出

1.1 全局变量检测增强

c 正常编译输出。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//1、全局变量检测增强
int a;
int a = 10;
int main(){printf(" %d\n",a);system("pause");return EXIT_SUCCESS;
}

c++ 会检测出重定义
在这里插入图片描述

1.2 函数检测增强

c 正常编译输出

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
getRectS( w  , h)
{return w *h;
}
void test01()
{printf("%d\n", getRectS(10, 10, 10));
}
int main(){test01();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

c++ 返回值检测、形参类型检测、函数调用参数个数检测
在这里插入图片描述

1.3 类型转换检测增强

c 类型检测不严谨 malloc 返回类型void*,正常编译通过。

void test02()
{char * p = malloc(64);
}

c++ 必须进行类型转换才能通过。
在这里插入图片描述
在这里插入图片描述

1.4 struct增强

c 结构体中不能有函数
在这里插入图片描述
c 创建结构体变量必须加关键字struct
在这里插入图片描述

c++ 可以放函数,创建结构体变量,可以简化关键字 struct
在这里插入图片描述

1.5 bool类型扩展

c 没有bool类型
在这里插入图片描述
c++ 有bool类型
在这里插入图片描述

1.6 三目运算符增强

c 三目运算符变量作为左值不可修改。
在这里插入图片描述

c++ 三目运算符增强,返回变量作为左值可被修改。

#include<iostream>
using namespace std;
void test05()
{int a = 10;int b = 20;printf("ret = %d\n", a > b ? a : b);(a < b ? a : b )= 100; // C++下返回的是变量  b = 100printf("a = %d\n", a);printf("b = %d\n", b);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

1.7 const增强

1.7.1 全局Const对比

c 不可修改
在这里插入图片描述
使用指针修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int m_A = 100; // 受到常量区保护,运行修改失败
void test05()
{int * r = &m_A;*r = 200;printf("m_A = %d\n",m_A);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出: 退出,没有修改成功
在这里插入图片描述

c++ 与C结论一致

1.7.2 局部Const对比

c 可以被修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>void test05()
{//局部constconst int m_B = 100; //分配到栈上//m_B = 200;  //直接修改会报错int * p = &m_B; //指针修改成功*p = 200; printf("%d\n", m_B);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述
c++ 修改失败

#include<iostream>
using namespace std;
void test06()
{//局部constconst int m_B = 100;//m_B = 200;//直接修改会报错int * p = (int *)&m_B;//指针修改失败*p = 200;cout << "m_B = " << m_B << endl;
}
int main(){test06();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述

1.7.3 Const变量初始化数组

c 初始化失败 C语言下Const修饰的是伪常量
在这里插入图片描述
c++ 初始化成功 :C++下const修饰的变量 称为常量 ,可以初始化数组
在这里插入图片描述

1.7.3 Const修饰变量的链接性

c 下const修饰全局变量默认是外部链接属性
主文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>int main(){extern const int g_a; printf("g_a = %d\n", g_a);system("pause");return EXIT_SUCCESS;
}

另外一个.c文件

 const int g_a = 100;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
c 下const修饰全局变量默认是外部链接属性,所以.c文件定义的变量没有使用extern 关键字,但是主文件能够通过extern关键字链接到真正需要的变量,体现了const修饰全局变量默认是外部链接属性这一特点。

c++下const修饰全局变量默认是内部链接属性
主文件

#include<iostream>
using namespace std;int main(){extern const int g_b ; cout << "g_b = " << g_b << endl;;system("pause");return EXIT_SUCCESS;
}

另外一个.cpp文件

extern const int g_b = 1000;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
两个文件都加了extern ,定义是在主文件里定义的,但是初始化却是在另一个.cpp文件初始化的,因为c++中const修饰全局变量默认是内部链接属性,所以外部文件初始化时需要使用extern关键字声明,如果去掉会编译报错。


二、分析总结

C++对C语言增强和扩展如下:

1.全局变量检测增强  C++检测出重定义
2.函数检测增强  返回值检测、形参类型检测、函数调用参数个数检测
3.类型转换检测增强  类型转换检测更严谨
4.struct增强   C++可以放函数,创建结构体变量,可以简化关键字 struct
5.bool类型扩展  扩展添加bool类型
6.三目运算符增强  返回变量作为左值可被修改
7.const增强  c++下const修饰是真常量,且可以用来初始化数组
8.Const修饰变量的链接性  c 下const修饰全局变量默认是外部链接属性,   c++下const修饰全局变量默认是内部链接属性

相关文章:

C++学习Day01之C++对C语言增强和扩展

目录 一、程序及输出1.1 全局变量检测增强1.2 函数检测增强1.3 类型转换检测增强1.4 struct增强1.5 bool类型扩展1.6 三目运算符增强1.7 const增强1.7.1 全局Const对比1.7.2 局部Const对比1.7.3 Const变量初始化数组1.7.3 Const修饰变量的链接性 二、分析总结 一、程序及输出 …...

【文件上传WAF绕过】<?绕过、.htaccess木马、.php绕过

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…...

flutter如何实现省市区选择器

前言 当我们需要用户填写地址时&#xff0c;稳妥的做法是让用户通过“滚轮”来滑动选择省份&#xff0c;市&#xff0c;区&#xff0c;此文采用flutter的第三方库来实现这一功能&#xff0c;比调用高德地图api简单一些。 流程 选择库 这里我选择了一个最近更新且支持中国的…...

Python——将Pyaudio的frame音频数据转换成wave格式

要将pyaudio捕获的音频帧&#xff08;frame&#xff09;数据转换成wave模块可以直接处理的格式&#xff0c;通常意味着你需要将这些音频帧数据组装成一个完整的音频流&#xff0c;并确保它们以wave模块期望的格式进行存储。但是&#xff0c;如果你的目的是将这些帧数据直接转换…...

Vue 上门取件时间组件

本文使用vue2.0elementui 制作一个上门取件时间组件&#xff0c;类似顺丰&#xff0c;样式如下&#xff1a; 大概功能&#xff1a;点击期望上门时间&#xff0c;下面出现一个弹框可以选择时间&#xff1a; 首先我们定义一些需要的数据&#xff1a; data() {return {isDropdown…...

学习python第一天

1.输出 print("Hello, World!") 2.退出命令提升符 exit() 3.Python 缩进 实例 if 5 > 2:print("Five is greater than two!") 空格数取决于程序员&#xff0c;但至少需要一个。 您必须在同一代码块中使用相同数量的空格&#xff0c;否则 Python 会…...

interface转string输出打印

文章目录 前言一、interface 转json再转string二、使用类型判断 前言 在开发过程中&#xff0c;有时我们使用interface类型接受某些参数接口或返回类型&#xff0c;但输出时&#xff0c;比如记录日志时存在很多不方便情况&#xff0c;输出string发现输出的乱七八糟&#xff0c…...

如何在PS5上使用金手指修改游戏

环境&#xff1a;windows PS5 问题&#xff1a;PS5 没有GodHen&#xff0c;无法使用json金手指&#xff0c;PKG金手指比较少 解决办法&#xff1a;使用MultiTrainerv从网络注入PS5&#xff0c;修改进程内存 背景&#xff1a;为了护肝&#xff0c;拒绝刷刷刷 解决过程&#xff…...

M1芯片MAC 安装MySQL、Nacos遇到的问题

摘要&#xff1a;由于电脑上是M1芯片&#xff0c;安装软件时遇到一系列问题&#xff0c;记录下踩的坑&#xff01;&#xff01;&#xff01; 安装MySQL MySQl官网下载链接区分ARM和X86架构&#xff0c;终端输入uname -a指令&#xff0c;本机显示为ARM czhczhdeiMac ~ % uname…...

尝试创建若依系统项目(vue3+element-plus+vite) 持续更新...

若依官网&#xff1a;RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|Spri…...

Pytest测试用例参数化

pytest.mark.parametrize(参数名1,参数名2...参数n, [(参数名1_data1,参数名2_data1...参数名n_data1),(参数名1_data2,参数名2_data2...参数名n_data2)]) 场景&#xff1a; 定义一个登录函数test_login,传入参数为name,password&#xff0c;需要用多个账号去测试登录功能 # …...

【Vue】指令之显示切换,属性绑定

Vue指令【2】 显示切换与属性绑定v-show指令v-if指令v-bind指令 显示切换与属性绑定 v-show指令 作用&#xff1a;根据真假切换元素的显示状态 指令后的内容最终都会解析为布尔值数据改变之后&#xff0c;对应元素的显示状态会同步更新 语法&#xff1a; <div id"…...

Z字型遍历二叉树

编码过程 掏出Deque&#xff0c;先写从左往右遍历 class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque new ArrayDeque<>();deque.offer(root);while (!deque.isEmpty()) {int n deque.size();f…...

【Go语言成长之路】安装Go

文章目录 安装Go一、下载Go语言安装包二、删除以前安装的Go版本三、添加/usr/local/go/bin到环境变量内四、确认安装成功 安装Go Note: 这里只演示安装Linux版本的Go&#xff0c;若为其它版本&#xff0c;请按照官网的安装教程进行安装即可。 一、下载Go语言安装包 ​ 在浏览…...

C语言常见面试题:C语言中如何进行图形界面编程?

在C语言中进行图形界面编程通常需要借助一些图形库。以下是一些常用的C语言图形库及其使用方法&#xff1a; GTK (GIMP Toolkit)&#xff1a; GTK 是一个广泛使用的开源图形库&#xff0c;可用于创建跨平台的桌面应用程序。它提供了一套丰富的控件&#xff0c;如按钮、文本框、…...

删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…...

WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败

定义DataTemplate 数据模板文件&#xff0c;内容如下 <DataTemplate x:Key"{DataTemplateKey {x:Type VM:TemplateListVM}}" DataType"{x:Type VM:TemplateListVM}"> <Grid Margin"0" Grid.Row"3" Height"50" Ver…...

ElasticSearch搜索与分析引擎-Linux离线环境安装教程

目录 一、下载安装包 网盘链接: 二、安装流程及遇到的问题和解决方案 &#xff08;1&#xff09;JDK安装 &#xff08;2&#xff09;Elasticsearch安装 &#xff08;3&#xff09;Kibana安装 ​&#xff08;4&#xff09;Ik分词器安装 三、启动过程中的问题 &#xff…...

网络安全全栈培训笔记(59-服务攻防-中间件安全CVE复现lSApacheTomcataNginx)

第59天 服务攻防-中间件安全&CVE复现&lS&Apache&Tomcata&Nginx 知识点&#xff1a; 中间件及框架列表&#xff1a; lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,…...

操作系统真象还原---系列笔记总结

闲话 最开始知道这本书是在校内论坛上&#xff0c;有同学通过这本书里的项目拿到大厂的ssp offer&#xff0c;于是就从网上订购了这本较为大部头的书&#xff0c;想要在简历上添加一个足够底层并且有意思的项目经历&#xff0c;从而帮助自己在秋招时赢得一个好的offer。 第一遍…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...