C++ 基础_Day01

news2024/11/26 11:51:48

准备工具Vscode或者Clion或者Dev C++或者Vs studio 和
MSYS2 是C++跨平台的重要工具链.

文章目录

  • 准备工作
      • 安装MSYS2
      • 软件
    • 创建文件
  • 一、基本介绍
    • 1.1C++源文件
    • 1.2 代码注释
    • 1.3变量与常量
      • 1.3.1变量
      • 1.3.2 常量
      • 1.3.3 二者的区别:
    • 1.4 关键字和标识符
  • 二、数据类型
    • 2.1 基本数据类型:
      • 2.1.1整型:
      • 2.1.2 浮点型 (实数):
      • 2.1.3 字符型 (char 1个字节):
        • 2.1.3.(1)转义字符
      • 2.1.4 布尔型 (bool):
    • 2. 2 用户定义数据类型(后续):
    • 2.3 字符串型
    • 2.4 数据键入
  • 三、运算符

准备工作

安装MSYS2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
pacman -S mingw-w64-ucrt-x86_64-gcc 后Y

最后用cmd gcc --version

在这里插入图片描述
环境变量添加进去:
在这里插入图片描述

软件

CLion

创建文件

右击–New–C/C++ Source File
在这里插入图片描述
在这里插入图片描述

一、基本介绍

1.1C++源文件

该文件一般是以.cpp 或者 .cxx 后缀结尾的。

#include<iostream>
using namespace std;
// main有且仅有一个
int main() {

	cout << "Hello C++__world" << endl;
	//system("pause");
	return 0;
}

在这里插入图片描述
main 函数只包含一行代码:这个单条语句是以 std 开头,然后以一个分号(;)作为结尾
的。

1.2 代码注释

注释是一种编写代码时用来解释程序的作用和用途的特殊语句,编译器会自动检测并忽略,注释并不对程序功能产生任何影响。

格式:
(1)单行注释: // 后接对代码的描述
放置在代码上方,或者代码语句结束的结尾较好。

(2)多行注释:/*多行注释*/
这个由于可能代码篇幅可能较长,所以推荐写在整体的上方。

1.3变量与常量

1.3.1变量

给一段指定的内存空间起名,方便操作这段内存

语法数据类型 变量名 = 初始值;

注意:最好是在定义的时候,给变量赋初值。因为变量是在操作指定的内存空间,在定义变量的时候,会找某一空间,却不可保证改空间原先的值是没有的。

#include<iostream>
using namespace std;

int main() {
	//最好是在定义的时候,给变量赋初值。
	int a = 5;
	//带有中文输出的内容,需要把编码格式改为GBK
	cout << "a 的值= " << a << endl;
	
	system("pause");

	return 0;
}

1.3.2 常量

不随任何的行为而改变自身数据

语法
(1)#define 宏定义 #define 常量名 常量值
源文件的上方定义的

(2)const 修饰的变量 const 数据类型 常量名 = 常量值
被const修饰该变量为常量,不可修改

1.3.3 二者的区别:

虽两种方式都可以用来定义常量,但仍存在一些区别:

  1. #define 宏常量:

    • 使用预处理指令,简单替换,没有类型检查。
    • 不占用内存,直接替换为常量值(是简单的文本替换,它将符号替换成相应的文本; 即:#define 定义的常量没有分配存储空间,没有对应的地址)。
    • 可以定义函数、表达式等,不仅仅限于常数(define可以采用表达式作为名称)。
    • 宏不受作用域限制,全局可用。
  2. const修饰的变量:

    • 是真正的变量,具有数据类型,会占用内存。(因为const 定义的常量在内存中分配了存储空间,可以获取其地址
    • 提供类型安全,编译器会进行类型检查。
    • 有作用域限制,遵循普通变量的作用域规则。
    • 更推荐,因为具有类型信息,易于维护和调试。

通常情况下,推荐使用 const 修饰的变量来定义常量,因为它更具类型安全性和可读性。

1.4 关键字和标识符

C++中的关键字是指具有特殊含义的保留单词,例如"int"和"if"

在给变量或者常量起名称时候,不要用C++得关键字,否则会产生歧义。

在这里插入图片描述

标识符是程序员定义的用于命名变量、函数等的名称。 给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读

  • 标识符不能是关键字
  • 标识符只能由字母、数字、下划线组成
  • 第一个字符必须为字母或下划线
  • 标识符中字母区分大小写

二、数据类型

C++中的数据类型可以分为
好的,我会继续介绍C++中常见的基本数据类型和用户定义数据类型。

2.1 基本数据类型:

检验类型大小 ` sizeof(数据类型、变量) `

C++是一种静态类型语言,这意味着在创建变量或常量时必须明确指定其数据类型。编译器需要在编译时确定每个变量的数据类型,以便正确分配内存并执行相应的操作。

如果不指定数据类型,编译器将无法正确处理变量的内存分配和操作,因此必须明确定义数据类型。

2.1.1整型:

用于表示整数类型的数据,可以是正数、负数或零。区别在于存储的空间大小不同 

short < int <= long <= long long

short:2字节 -2^15 - 2 ^15 -1
int :4字节 -2^31 - 2 ^31 -1
long:在32位系统上通常4字节, 在64位系统上通常8字节, -2^31 - 2 ^31 -1
long long :8字节 -2^15 - 2 ^63 -1

2.1.2 浮点型 (实数):

用于表示带有小数的数值,其中`float`表示单精度浮点数,而`double`表示双精度浮点数。
  1. float:

    • float 是一种单精度浮点数数据类型,通常占用4字节(32位),可以存储大约7位有效数字。
    • 使用 f 后缀来明确指定一个浮点数为 float 类型,如 3.14f
  2. double:

    • double 是一种双精度浮点数数据类型,通常占用8字节(64位),可以存储大约15-16位有效数字。
  3. 科学计数法:

    • C++支持科学计数法来表示浮点数,使用形如 aeb 的表示法,其中 a 是系数,e 是底数为10的指数,b 是指数的符号。例如,3e2 表示 (3 *10^2),即300;0.03 可以写作 3e-2 表示 (3 *10^(-2))。

示例:

float pi = 3.14f; // 使用 f 后缀指定 float 类型
double largeNumber = 1.234567890123456789; // 默认为 double 类型

float a = 3e2; // 表示 300
float b = 3e-2; // 表示 0.03

2.1.3 字符型 (char 1个字节):

作用: 用于表示单个字符,以ASCII编码1为基础。

语法: char ch = 'a';

注意
( 1 )用单引号括起字符,示例:char myChar = 'A';
( 2 )单引号内只能包含一个字符,不能是字符串,示例:char myChar = 'AB'; 是不允许的,应该是 char myChar = 'A';
( 3 )字符型变量(char)在C和C++中通常占用1个字节(8位),无论是用于存储字符本身还是对应的ASCII码。

2.1.3.(1)转义字符

用于表示一些不能显示出来的ASCII字符

转义字符是在字符前面加上反斜杠(\)来表示一些特殊字符或操作,通常用于在字符串或字符常量中插入不易直接输入的字符。

常用的转义字符有: \n \\ \t

2.1.4 布尔型 (bool):

布尔类型(bool)是一种用于表示真(true)或假(false)的数据类型,在C++中占用1个字节大小。它是用来做逻辑判断的基本类型。

bool flag = true;
	cout << flag << endl; // 1

	flag = false;
	cout << flag << endl; // 0

	cout << "size of bool = " << sizeof(bool) << endl; //1

2. 2 用户定义数据类型(后续):

  • 结构体 (struct): 允许创建包含多个不同数据类型的组合体,可以通过结构体定义多个变量来描述一个实体的属性。
  • 类 (class): 允许创建具有成员变量和成员函数的自定义数据类型,实现了面向对象编程的概念,包括封装、继承和多态。
  • 枚举类型 (enum): 允许创建一个包含一组命名常量的新数据类型。
  • 共用体 (union):共用体允许在同一内存位置存储不同的数据类型。这意味着共用体的成员共享内存,修改一个成员会影响到其他成员。
  • typedef 定义的类型:typedef 是用来为现有类型定义新的名称,提高代码的可读性和可维护性。

2.3 字符串型

在C++中,字符串类型可以属于两种类型:普通类型和用户定义类型,具体取决于使用的字符串表示方式。

  1. 普通类型(延续C语言风格):

    • 在C++中,可以使用字符数组(char array)或指向字符的指针来表示字符串。这种方式属于普通类型,没有特定的用户定义类型,它们是C和C++的基本字符串表示方式。
    char str1[] = "Hello, world!";  // 字符数组表示字符串
    char* str2 = "Hello, world!";    // 字针表示字符串
    
  2. 用户定义类型:

    • 另一方面,C++也提供了标准库中的 std::string 类,这是一个用户定义的字符串类型。std::string 是一个类,提供了丰富的字符串操作功能和方便的字符串管理。
    #include <string>
    
    std::string str = "Hello, world!";  // 使用 std::string 类型
    

std::string 是C++标准库中的一部分,它提供了很多方便的字符串处理方法,例如字符串拼接、查找、替换等操作,使得字符串处理更方便和高效。

因此,字符串可以是普通类型(字符数组或指针)或用户定义类型(std::string),具体取决于你选择的字符串表示方式。如果需要更多信息或有其他问题,请随时提出。

2.4 数据键入

作用:用于从键盘获取数据

关键字: cin

语法: cin >> 变量

cin通常与运算符>>一起使用,用于将输入的数据存储到指定的变量中。这样可以方便地从用户那里接收输入,并在程序中进行处理

int x = 0;
	cout << "请输入整型变量x的值:" << endl;
	cin >> x;
	cout << x << endl;

三、运算符

在这里插入图片描述
注意(1) 两个小数不可做取模运算,结果看左边

	int a3 = 10;
	int b3 = 0;
	//报错,除数不可以为0
	//cout << a3 / b3 << endl; 
 
  // 两个小数不可做取模运算,结果看左边
  //  除数不为0
  cout << -10 % 3 << endl; //-1
  cout << 10 % 3 << endl;  // 1

//两个小数可以相除
	double d1 = 0.5;
	double d2 = 0.25;
	cout << d1 / d2 << endl;

(2)赋值是‘=’ 等于是‘==’

算术运算符
在这里插入图片描述
赋值运算符
在这里插入图片描述
比较运算符
在这里插入图片描述

逻辑运算符
在这里插入图片描述


  1. ASCII(American Standard Code for Information Interchange)编码将每个字符映射到一个唯一的整数。例如,字母 ‘a’ 对应的ASCII码是97。因此,当你在C或C++中创建一个字符型变量时,实际上是将该字符对应的ASCII码存储在内存中。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序 第十四章 查询方式的按键驱动程序_编写框架14.1 LED驱动回顾14.2 按键驱动编写思路14.3 编程&#xff1a;先写框架14.3.1 把按键的操作抽象出一个button_operations结构体14.3.2 驱动程序的上层&#xff1a;file_operation…

自动驾驶中的感知模型:实现安全与智能驾驶的关键

自动驾驶中的感知模型&#xff1a;实现安全与智能驾驶的关键 文章目录 引言感知模型的作用感知模型的技术安全与挑战结论 2023星火培训【专项营】Apollo开发者社区布道师倾力打造&#xff0c;包含PnC、新感知等的全新专项课程上线了。理论与实践相结合&#xff0c;全新的PnC培训…

【洛谷】P3378 【模板】堆

原题链接&#xff1a;https://www.luogu.com.cn/problem/P3378 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 一道模板题&#xff0c;主要是熟悉STL中优先队列&#xff08;priority_queue&#xff09;的使用。 堆的STL实现: priority_queue<in…

国庆周《LInux学习第四课》

国庆周《LInux学习第四课》 软件的安装与卸载 图解

无人注意,新安装的 Ubuntu 23.04 不支持安装 32 位应用

导读新安装的 Ubuntu 23.04 不支持安装 32 位应用。 无人注意&#xff0c;新安装的 Ubuntu 23.04 不支持安装 32 位应用 有用户报告&#xff0c;在新安装的 Ubuntu 23.04 上从 Ubuntu 仓库安装的 Steam 客户端是不工作的。在 Ubuntu 23.04 中使用了基于 Flutter 的新安装程序…

故障:无线鼠标键盘有时候出现短暂失灵的情况

无线鼠标连台式机用的&#xff0c;之前一直没问题&#xff0c;最近开始出现短暂失灵的情况。 并不是有延时&#xff0c;因为在失灵期间的那些操作在恢复后不会执行。 有的时候&#xff0c;电脑是在打开或者关闭某些应用&#xff0c;即调用cpu的情况&#xff0c;这个时候出问题…

k8s搭建EFK日志系统

搭建 EFK 日志系统 前面大家介绍了 Kubernetes 集群中的几种日志收集方案&#xff0c;Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana&#xff08;EFK&#xff09;技术栈&#xff0c;也是官方现在比较推荐的一种方案。 Elasticsearch 是一个实…

Cannot download sources:IDEA源码无法下载

问题 Swagger的相关包&#xff0c;无法看到注释&#xff1b; 在class文件的页面&#xff0c;点击下载源码&#xff0c;源码下载不了&#xff0c;IDEA报下面的错误。 报错 Cannot download sources Sources not found for: io.swagger.core.v3:swagger-annotations:2.2.9 解决…

差分放大器的精髓:放大差模信号 抑制共模信号

参考如图基本的差分放大电路&#xff0c;在R1R2 R3R4的条件下&#xff0c;其输出与输入的关系为 &#xff1a; 具体推导过程参考&#xff1a;差分运算放大器的放大倍数的计算及结论_正在黑化的KS的博客-CSDN博客 由这个式子我们可以发现&#xff0c;差分放大器放大的是同相端与…

凉鞋的 Godot 笔记 103. 检视器 :节点的微观编辑和查看

在上一篇&#xff0c;笔者简单介绍了场景与节点的增删改查&#xff0c;如下所示: 在这一篇&#xff0c;我们接着往下学习。 我们知道在场景窗口&#xff0c;可以对节点进行增删改查。 在 Godot 引擎使用过程中&#xff0c;场景窗口的使用频率是非常高的。 但是场景窗口只能编…

系统集成|第二十一章(笔记)

目录 第二十一章 知识产权与法律法规21.1 知识产权21.2 法律法规 上篇&#xff1a;第二十章、收尾管理 第二十一章 知识产权与法律法规 21.1 知识产权 概述&#xff1a;狭义的知识产权就是传统意义上的知识产权&#xff0c;包括著作权&#xff08;含邻接权&#xff09;&#x…

深度学习——模型选择、欠拟合和过拟合

深度学习——模型选择、欠拟合和过拟合 文章目录 前言一、训练误差和泛化误差1.1. 统计学习理论1.2. 模型复杂性 二、模型选择2.1. 验证集2.2. K折交叉验证 三、欠拟合 or 过拟合3.1. 模型复杂性3.2. 数据集大小 四、多项式回归4.1. 生成数据集4.2. 对模型进行训练和测试4.3. 三…

Egg 封装接口返回信息

中间件封装 代码 const msgArr {"200":成功,"401":token失效 } module.exports (option, app) > {return async function(ctx, next) {try{//成功是返回的信息ctx.emit(code,data,msg)>{console.log(1111,code,data,msg)ctx.body {code,data:dat…

嵌入式Linux应用开发-第十三章APP怎么读取按键值

嵌入式Linux应用开发-第十三章读取按键及按键驱动程序 第十三章 APP怎么读取按键值13.1 妈妈怎么知道孩子醒了13.2 APP读取按键的4种方法13.2.1 查询方式13.2.2 休眠-唤醒方式13.2.3 poll方式13.2.4 异步通知方式13.2.4.1 异步通知的原理&#xff1a;发信号13.2.4.2 应用程序之…

MyBatisPlus(六)字段映射 @TableField

字段注解&#xff08;非主键&#xff09; TableField 用于映射对象的 属性 和表中的 字段 。 当 属性名 和 字段名 差异较大的时候&#xff0c;无法通过默认的映射关系对应起来&#xff0c;就需要指定 属性名 对应 的 字段名。 官网示例 代码实例 package com.example.web.…

clip代码安装实操

CLIP模型及代码地址&#xff1a;GitHub - openai/CLIP: Contrastive Language-Image Pretraining 代码准备环境 先创建一个anaconda虚拟环境&#xff0c;包含python3.7版本&#xff0c;将该环境命名为clip。成功。 &#xff08; pytorch1.7.1 所需 python 版本 >3.6&…

JVM内存线程Dump

Heap Dump文件生成 Heap Dump是指在Java虚拟机中&#xff0c;将当前内存中的对象信息以二进制形式保存到文件中的操作。它可以用于分析内存泄漏、内存溢出等内存相关问题。 生成Heap Dump文件的方式有多种&#xff0c;可以通过命令行工具如jmap、jcmd&#xff0c;也可以通过J…

Golang中的包和模块设计

Go&#xff0c;也被称为Golang&#xff0c;是一种静态类型、编译型语言&#xff0c;因其简洁性和对并发编程的强大支持而受到开发者们的喜爱。Go编程的一个关键方面是其包和模块系统&#xff0c;它允许创建可重用、可维护和高效的代码。本博客文章将深入探讨在Go中设计包和模块…

数据结构 图 并查集 遍历方法 最短路径算法 最小生成树算法 简易代码实现

文章目录 前言并查集图遍历方法广度优先遍历深度优先遍历 最小生成树算法Kruskal算法Prim算法 最短路径算法Dijkstra算法BellmanFord算法FloydWarshall算法 全部代码链接 前言 图是真的难&#xff0c;即使这些我都学过一遍&#xff0c;再看还是要顺一下过程&#xff1b;说明方…

普通用户在Linux下免密执行sudo命令,真的可以吗?

主旨 在linux的日常运维中&#xff0c;我们会发现&#xff0c;使用root用户的权限太大了&#xff0c;很多时候一不小心就删错了&#xff0c;而且恢复不回来&#xff0c;我们应该怎么避免呢&#xff1f; 我们可以使用普通用户进行服务器的登录&#xff0c;如果有权限不够的情况&…