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

C++基础入门Day1

C++基础入门Day1

1.1 第一个C++程序

编写一个C++程序需要四个步骤

  • 创建项目
  • 创建文件
  • 编写代码
  • 运行程序

1.1.1 创建项目

VS2022

1.1.2 创建文件

main.cpp

1.1.3 编写代码

注意:编写时键盘必须调整成英文

  • 基本框架
#include <iostream>
using namespace std;
int main() {system("pause");return 0;
}
  • 第一个程序-HelloWorld:cout << "hello world" << endl;"
    • 双引号中所写的字符串是可以任意修改:cout << "hello c++" << endl;"
    • cout后跟随的内容可以打印在控制台上

1.2 注释

  • 在代码中添加一些说明和解释,方便自己和其他程序员阅读代码
    • 给程序员自己看的,不是给计算机看的
  • 语法格式
    • 单行注释:// 描述信息(一行)
    • 多行注释:/* 描述信息(多行) */
  • main函数
    • 错误示例:int main1() {}
#include <iostream>
using namespace std;// 1.单行注释/*
2.多行注释多行注释多行注释
*//*main是一个程序的入口每个程序必须有main函数有且仅有一个
*/int main() {// 向控制台输出hello worldcout << "hello world" << endl;system("pause");return 0;
}

1.3 变量

  • 给一段指定的内存空间起名,方便操作这段内存
  • 语法格式:数据类型 变量名 = 初始值;

1.3.1 内存的概念

内存是计算机中用于存储数据和程序的临时存储器件。它在计算机工作过程存储正在运行的程序和数据,以便CPU能够快速地访问和处理这些信息。

1.3.2 内存的表示

  1. 每段内存都有一段属于自己的地址编号,用十六进制的数字来表示
    • 数字10对应编号 0x1234
    • 缺点:100个数字要记录100个地址编号,太麻烦
  2. 用特定的名称表示内存
    • 数字10对应变量a,通过a就可以访问10(按照高中数学里的变量理解即可)
    • 语法格式:数据类型 变量名 = 初始值;
    • int a = 10;
#include <iostream>
using namespace std;
int main() {// 创建变量aint a = 10;cout << "a=" << a << endl;system("pause");return 0;
}

1.3.3* 内存扩展

1. 内存容量的单位

  • 位(Bit):是计算机内存和存储的最基本单位,代表一个二进制数字,0或1。
  • 字节(Byte):常用的内存单位,1字节等于8位。字节是最小的可寻址内存单位。
  • 千字节(KB,Kilobyte):1KB 约等于 1,000 字节(实际上在计算机科学中,经常按照 2 的幂来定义,即 1 K B = 2 10 = 1024 1KB = 2^{10} = 1024 1KB=210=1024 字节)。
  • 兆字节(MB,Megabyte):1MB 约等于 1,000,000 字节或 1,024 KB。
  • 吉字节(GB,Gigabyte):1GB 约等于 1,000,000,000 字节或 1,024 MB。
  • 太字节(TB,Terabyte):1TB 约等于 1,000,000,000,000 字节或 1,024 GB。

2. 地址的十六进制数表示

  • 内存地址:每个存储在内存中的字节都有一个唯一的地址,这些地址用于定位和访问内存中的数据。地址通常以十六进制数表示。具体来说,有以下几个原因:
  1. 简化表示: 十六进制数可以更简洁地表示二进制数。由于计算机的基础是二进制系统,而每四位二进制数(比特)刚好可以用一个十六进制数字来表示,这种对应关系简化了长二进制数串的表示。例如,二进制的1101 1010 1111 0001可以用十六进制的DAF1来表示,大大减少了表示的长度。

  2. 易于转换: 二进制与十六进制之间的转换非常直接,不需要复杂的计算。

  3. 节省空间: 在文档、代码和界面中使用十六进制可以节省空间。例如,用十六进制表示内存地址时,相比二进制需要的空间少得多,这在编程、系统设计文档和教程中尤其有用。

3. 进制转换

数制转换是在不同的进制之间转换数值的过程,常见的进制包括二进制(基数为2)、十进制(基数为10)和十六进制(基数为16)。下面将介绍这三种数制之间的转换方法。

二进制与十进制之间的转换
  • 二进制转十进制:将每个二进制位乘以其对应的2的幂次方值,然后将这些值相加得到十进制数。

    例如,二进制1011转换为十进制:
    1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 8 + 0 + 2 + 1 = 11 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11 1×23+0×22+1×21+1×20=8+0+2+1=11

  • 十进制转二进制:将十进制数不断除以2,记录每次的余数,直到商为0。然后将余数逆序排列得到二进制数。

    例如,十进制13转换为二进制:

    • 13 ÷ 2 = 6 13 \div 2 = 6 13÷2=6 余 1
    • 6 ÷ 2 = 3 6 \div 2 = 3 6÷2=3 余 0
    • 3 ÷ 2 = 1 3 \div 2 = 1 3÷2=1 余 1
    • 1 ÷ 2 = 0 1 \div 2 = 0 1÷2=0 余 1

    所以,13的二进制为1101

二进制与十六进制之间的转换
  • 二进制转十六进制:将二进制数每四位一组(从右向左)转换成对应的十六进制数。如果最左边的组不足四位,则在前面补零。

    例如,二进制11010111转换为十六进制:

    • 分为两组:11010111
    • 1101对应十六进制的D0111对应十六进制的7

    所以,二进制的11010111等于十六进制的D7

  • 十六进制转二进制:将每个十六进制位转换成对应的四位二进制数。

    例如,十六进制1A3转换为二进制:

    • 1对应二进制的0001
    • A(即十进制的10)对应二进制的1010
    • 3对应二进制的0011

    所以,十六进制的1A3等于二进制的000110100011

1.4 常量

  • 用于记录程序中不可更改的数据
    在C++中,定义常量的两种主要方式是使用#define预处理器指令和const关键字。这两种方式各有特点和用

1.4.1 定义常量的两种语法格式

1. #define宏常量
  • #define是一种预处理器指令,用于在编译之前替换文本。它不分配存储空间,仅仅在预处理阶段将所有的标识符替换为定义的值。其语法如下:`#define identifier value

  • identifier是要定义的常量名,value是与之关联的值。例如:#define PI 3.14159

  • 这行代码定义了一个常量PI,其值为3.14159。在程序中,每次使用PI时,预处理器都会将其替换为3.14159。

  • 使用#define定义的常量具有全局作用域,且没有类型,它们仅仅是文本替换,因此不能保证类型安全。

2. const修饰的变量
  • const关键字用于定义常量变量,即值不能被修改的变量。与#define不同,使用const定义的常量具有类型,编译器可以进行类型检查,从而提高程序的安全性。其语法如下:const type identifier = value;

  • type是常量的数据类型,identifier是常量的名称,value是常量的值。例如:const double Pi = 3.14159;

  • 这行代码定义了一个类型为double的常量Pi,其值为3.14159。使用const定义的常量遵循正常的作用域规则,这意味着它们可以是局部的或全局的,依赖于它们定义的位置。

3*.作用域简介

作用域指的是程序中定义的变量和函数可被访问的区域。根据变量或函数定义的位置,作用域决定了哪些部分的程序可以使用这些变量或函数,以及如何使用它们。作用域有助于限制变量生命周期和可见性,从而提高程序的可读性、可维护性和避免命名冲突。

  1. 局部作用域(Local Scope): 局部作用域通常指的是在函数或代码块(如if语句、循环等)内部定义的变量。这些变量只能在它们被定义的那个函数或代码块中被访问和修改,对外部是不可见的。

  2. 全局作用域(Global Scope): 在所有函数之外定义的变量拥有全局作用域,这意味着它们可以在程序的任何地方被访问和修改。全局变量的生命周期从它们被定义开始,直到程序结束。

#include <iostream>
using namespace std;// 使用#define定义常量
#define MAX_SIZE 100int main() {// 使用const定义常量const float PI = 3.14159f;cout << "The maximum size is: " << MAX_SIZE << endl;cout << "The value of Pi is: " << PI << endl;system("pause");return 0;
}

注意:常量一旦被定义以后便不可以修改,否则报错

const float PI = 3.14159f;
PI = 1;

1.5 关键字(标识符)

  • C++中预先保留的单词
  • 在命名变量和常量时,不能使用关键字,不需要记忆,有印象即可

基本关键字

关键字描述
int定义整数类型
float定义单精度浮点数类型
double定义双精度浮点数类型
char定义字符类型
void表示无返回值或空类型
bool定义布尔类型

控制流关键字

关键字描述
if条件语句,用于执行条件为真的代码块
elseif语句条件为假时执行的代码块
switch多分支选择语句
caseswitch语句中标识不同的分支
defaultswitch语句中的默认分支
while循环语句,当条件为真时执行代码块
do循环语句,先执行一次代码块,然后检查条件
for循环语句,用于迭代指定次数的代码块
break中断当前循环或switch语句
continue终止当前循环的迭代并开始下一次迭代
return从函数中返回值

数据类型关键字

关键字描述
struct定义结构体,可以包含不同类型的成员
class定义类,用于面向对象编程
enum定义枚举类型
union定义联合体,所有成员共享相同的内存空间
typedef为数据类型定义新的名称
auto自动推断变量类型
decltype返回表达式的类型

存储类关键字

关键字描述
static使局部变量在多次函数调用之间保持其值
extern声明变量或函数是在其他文件或模块中定义的
const定义只读变量,值不能被修改
volatile声明变量可能在程序的执行中被意外修改
register提示编译器将变量存储在寄存器中
mutable在类中声明的成员可以被const成员函数修改

类型修饰符关键字

关键字描述
const声明常量,值不能被修改
volatile声明变量可能在程序的执行中被意外修改
mutable在类中声明的成员可以被const成员函数修改

类型转换关键字

关键字描述
static_cast执行静态类型转换
dynamic_cast执行动态类型转换,用于运行时检查
const_cast从常量类型转换掉constvolatile
reinterpret_cast执行底层类型的转换
  • 错误示例
#include <iostream>
using namespace std;
int main() {// 不要用关键字给变量起名int double a = 10;system("pause");return 0;
}

1.6 标识符命名规则

在C++中,标识符是用来标识变量、函数、类、对象等程序实体的名称。标识符的命名规则是一套约定俗成的规定,以确保程序的可读性、可维护性和一致性。以下是C++中标识符的命名规则:

  1. 保留字:

    • 不允许使用C++中的保留字(关键字)作为标识符。
    • 例如,不要将关键字intclassif等用作标识符。
  2. 字符集规则:

    • 标识符由字母、数字和下划线组成
    • 标识符的第一个字符必须是字母或下划线
  3. 大小写敏感:

    • C++是大小写敏感的语言,因此myVariableMyVariable被视为两个不同的标识符。
  4. 规范命名风格:

    • 通常推荐使用有意义的名称,以提高代码的可读性。
    • 采用驼峰命名法(Camel Case)或下划线命名法(Snake Case)等命名规范。
      • 驼峰命名法myVariableName, calculateTotalAmount()
      • 下划线命名法my_variable_name, calculate_total_amount()

举例

  1. 保留字:

    // 不要使用关键字作为标识符
    int int = 10;     // 错误,使用了关键字 int
    double class = 3.14;  // 错误,使用了关键字 class
    
  2. 字符集规则:

    // 合法的标识符
    int myVariable;
    float my_float_variable;
    char _firstChar;// 非法的标识符
    int 123number;     // 错误,数字不能作为首字符
    double total@mount; // 错误,含有特殊字符 @
    
  3. 大小写敏感:

    // 大小写敏感
    int myVariable;
    int MyVariable; // 这两个是不同的变量
    
  4. 规范命名风格:

    • 驼峰命名法:

      int numberOfStudents;
      float averageGrade;
      void calculateTotalAmount();
      
    • 下划线命名法:

      int number_of_students;
      float average_grade;
      void calculate_total_amount();
      

相关文章:

C++基础入门Day1

C基础入门Day1 1.1 第一个C程序 编写一个C程序需要四个步骤 创建项目创建文件编写代码运行程序 1.1.1 创建项目 VS2022 1.1.2 创建文件 main.cpp 1.1.3 编写代码 注意&#xff1a;编写时键盘必须调整成英文 基本框架 #include <iostream> using namespace std…...

【高质量精品】2024美赛A题22页word版成品论文+数据+多版本前三问代码及代码讲解+前四问思路模型等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;即可获取完整资料后续参考论文!! 整体分析:这个题目是一个典型的生态系统建模问题&#xff0c;涉及到动物种群的性比例变化、资源可用性、环境因素、生态系统相互作用等多个方面。这个题目的难点在于如何建立一个合理的数学…...

Spark context stopped while waiting for backend

目录 报错信息 解决办法 解释 报错信息 Spark context stopped while waiting for backend 翻译过来就是 &#xff1a;Spark上下文在等待后端时停止 解决办法 通过在yarn-site.xml中添加如下配置项&#xff0c;并重启yarn&#xff0c;程序在 “–driver-memory 600m --e…...

保研机试算法训练个人记录笔记(三)

目录 基于范围的for循环 push_back return {it->second, i} 基于范围的for循环 for (const string& ageValue : age["Peter"]) 是C中的一种范围基于的for循环&#xff08;也称为基于范围的for循环&#xff09;&#xff0c;它用于遍历容器中的元素。在这个…...

2月6日作业

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&…...

rust给py写拓展如此简单

很久没写rust,主要是写业务逻辑实在用不上这高性能.不过惊奇发现rust和py结合的如此之好,记录下: 搞一个python环境,pip install maturin建立一个项目文件,cd进去 maturin init照着生成模版正常写rust,完毕后maturin develop,注意这个命令包括把拓展包安装到虚拟环境site pack…...

白嫖10款游戏加速器,一年都不用开会员!

过年期间你们是走亲串戚还是窝家玩游戏、追剧&#xff1f;相信很多小伙伴都不会放过这个难得的假期&#xff0c;肯定是会百忙之中来两把的&#xff0c;那么人一多玩游戏肯定就会拥堵&#xff0c;有延迟。解决延迟最好的办法就是用加速器&#xff0c;当你的网络比别人强时&#…...

Kafka SASL_SSL双重认证

文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制&#xff0c;主要分为SASL和SSL两大类。 SASL&#xff1a; 是一种身份验证机制&…...

css新手教程

css新手教程 课程&#xff1a;14、盒子模型及边框使用_哔哩哔哩_bilibili 一.什么是CSS 1.什么是CSS Cascading Style Sheet 层叠样式表。 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度&am…...

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

spring 版本以及相关的组件一直在变化&#xff0c;其中一些类或者功能在低版本中有&#xff0c;高版本中去掉了&#xff0c;有的新功能只在高版本有。 为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId…...

web前后端小坑记录

游戏服务器过年这段时间忙完了&#xff0c;好久没看web了&#xff0c;重温一下。发现竟然没有文章记录这些修BUG的过程&#xff0c;记录一下。 目录 如何处理F5刷新&#xff1f; 如何处理F5刷新&#xff1f; 后端应该发现路由不存在&#xff0c;直接返回打包好的index.html就…...

股票K线简介

股票K线&#xff08;K-Line&#xff09;是用于表示股票价格走势的图形&#xff0c;主要由四个关键价格点组成&#xff1a;开盘价、收盘价、最高价和最低价。K线图广泛应用于股票市场技术分析中&#xff0c;它提供了丰富的信息&#xff0c;帮助分析师和投资者理解市场的行情走势…...

路由器、路由器的构成、交换结构

目录 1 路由器 1.1 路由器的结构 “转发”和“路由选择”的区别 1.1.1 输入端口对线路上收到的分组的处理 1.1.2 输出端口将交换结构传送来的分组发送到线路 2.2 交换结构 2.2.1 通过存储器 2.2.2 通过总线 2.2.3 通过纵横交换结构 (crossbar switch fabric) 1 路由器…...

【Mysql】整理

Mysql整理与总结 整理Mysql的基本内容供回顾。 参考&#xff1a; [1]. 掘金.MySQL三大日志(binlog,redolog,undolog)详解 [2]. Javaguide.MySQL三大日志(binlog、redo log和undo log)详解...

项目02《游戏-08-开发》Unity3D

基于 项目02《游戏-07-开发》Unity3D &#xff0c; 本次任务做物品相互与详情的功能&#xff0c; 首先要做 点击相应&#xff0c; 接下来用接口实现点击相应事件&#xff0c;具体到代码中&#xff0c;我们找到需要响应鼠标事件的对象&#xff0c; 双击PackageCell…...

【数据库原理及应用】简答题归纳总结

第一章 数据库概论 1.人工管理阶段数据管理的特点&#xff1a; &#xff08;1&#xff09;数据不保存在机器中 &#xff08;2&#xff09;无专用的软件对数据进行管理 &#xff08;3&#xff09;只有程序的概念&#xff0c;没有文件的概念 &#xff08;4&#xff09;数据面向程…...

通过无线打通两个路由器

通过无线打通两个路由器 上网向导无线连接 配置比较简单&#xff0c;有些路由器支持有些不支持&#xff0c;支持的大致就是下面的方法&#xff0c;不过不同型号面板不一样&#xff0c;这里主要学习方法&#xff0c;所以不做路由器型号介绍。 重要的事情说三遍&#xff1a;学习要…...

idea 配置文件,中文出现乱码如何解决

在进行 spring 项目开发时&#xff0c;项目中有 application.properties/application.yml 等配置文件&#xff0c;在配置文件中使用中文注解时可能会出现乱码的情况&#xff0c;如下&#xff1a; 这是因为 idea 配置文件的编码和其他文件的不同&#xff0c;我们需要修改配置文件…...

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…...

14. 【Linux教程】文件压缩与解压

文件压缩与解压 前面小节介绍了如何对文件和目录删除、移动操作&#xff0c;本小节介绍如何使用命令对文件和目录进行压缩与解压操作&#xff0c;常见的压缩包格式有 .bz2、.Z、.gz、.zip、.xz&#xff0c;压缩之后的文件或目录占用更少的空间。 1. tar 命令介绍 下面列举 ta…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

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. 执行器…...