【C++】知识点汇总(上)

C++知识点复习上

  • 一、C++ 概述
    • 1. 基本数据类型
    • 2. 变量定义和访问
    • 3. 常量与约束访问
  • 二、程序控制结构详解与示例
    • 1. 表达式
    • 2. 选择控制
      • 2.1 if 语句
      • 2.2 switch 语句
    • 3. 循环控制
      • 3.1 for 循环
      • 3.2 while 循环
      • 3.3 do-while 循环
    • 4. goto 语句
    • 5. 控制语句的嵌套
  • 三、函数
    • 1. 函数的定义和调用
    • 2. 函数参数传递
    • 3. 调用机制
    • 4. 函数地址和指针
    • 5. 内联与重载
    • 6. 多文件程序和命名空间
  • 四、数组和动态存储
    • 1. 一维数组
    • 2. 二维数组
    • 3. 指针数组
    • 4. 动态存储
    • 5. Vector类
    • 6. String类
    • 7.比较
  • 五、集合与结构
    • 1. 位运算
      • 1.1 与运算(AND)
      • 1.2 或运算(OR)
      • 1.3 异或运算(XOR)
    • 2. 集合基本运算
      • 2.1 并集
      • 2.2 交集
      • 2.3 差集
    • 3. 结构的定义与访问
    • 4. 结构数组和链表
      • 4.1 结构数组
      • 4.2 链表

一、C++ 概述

C++ 是一种强大且广泛使用的编程语言,它结合了 C 语言的高效性和面向对象编程的特性。本文将介绍 C++ 的一些基本概念,包括基本数据类型、变量定义和访问,以及常量与约束访问。通过实际例子和表格,将了解这些重要的概念。

1. 基本数据类型

在 C++ 中,基本数据类型是构建其他数据类型的基石。以下是一些常见的基本数据类型:

类型描述大小
int整数类型4 字节
float单精度浮点数4 字节
double双精度浮点数8 字节
char字符类型1 字节
bool布尔类型1 字节

2. 变量定义和访问

在 C++ 中,变量是用于存储数据值的标识符。以下是变量的定义和访问的示例:

// 变量定义
int age;
float height;// 变量赋值
age = 25;
height = 1.75;// 变量访问
cout << "年龄:" << age << " 岁" << endl;
cout << "身高:" << height << " 米" << endl;

3. 常量与约束访问

常量是在程序执行期间不能被修改的值,而约束访问则是通过修饰符确保函数中的某些行为。以下是常量和约束访问的例子:

// 常量定义
const float PI = 3.14159;
const int MAX_AGE = 100;// 约束访问
void printMessage(const string& message) {cout << message << endl;
}int main() {printMessage("Hello, C++!");return 0;
}

在上述示例中,PIMAX_AGE 是常量,它们的值在程序运行期间不会改变。而 printMessage 函数中的 const string& message 表示 message 参数是一个常量引用,禁止在函数中修改传递的字符串。

二、程序控制结构详解与示例

程序控制结构是编程中至关重要的一部分,它决定了程序执行的流程和逻辑。接下来浅示七种表达式、两种选择控制、三种循环控制、goto 语句以及控制语句的嵌套。通过详细的例子和表格,将更好地理解这些控制结构的使用。

1. 表达式

表达式是编程语言中的基本构建块,它们用于执行特定的计算。以下是七种常见的表达式:

  1. 算术表达式: 执行基本的算术运算。

    int result = 5 + 3 * 2;
    
  2. 关系表达式: 比较两个值之间的关系。

    bool isEqual = (x == y);
    
  3. 逻辑表达式: 使用逻辑运算符组合多个条件。

    boolean isTrue = (a && b) || (c || d);
    
  4. 赋值表达式: 将一个值赋给一个变量。

    int a = 10;
    
  5. 条件表达式(三元运算符): 根据条件选择不同的值。

    var result = (x > 0) ? "Positive" : "Negative";
    
  6. 位运算表达式: 对二进制位进行操作。

    int result = a & b;
    
  7. sizeof 表达式: 返回数据类型的大小。

    size_t size = sizeof(int);
    

2. 选择控制

选择控制结构用于根据条件执行不同的代码块。

2.1 if 语句

if condition:# 如果条件成立执行此处代码
else:# 否则执行此处代码

示例:

int num = 5;
if (num % 2 == 0) {System.out.println("偶数");
} else {System.out.println("奇数");
}

2.2 switch 语句

switch (expression) {case value1:// 如果 expression 等于 value1 执行此处代码break;case value2:// 如果 expression 等于 value2 执行此处代码break;default:// 如果 expression 不等于任何一个 value 执行此处代码
}

示例:

char grade = 'B';
switch (grade) {case 'A':System.out.println("优秀");break;case 'B':System.out.println("良好");break;default:System.out.println("其他");
}

3. 循环控制

循环控制结构允许我们多次执行相同的代码块。

3.1 for 循环

for (initialization; condition; update) {// 循环体
}

示例:

for (int i = 1; i <= 5; i++) {Console.WriteLine(i);
}

3.2 while 循环

while (condition) {// 循环体
}

示例:

int count = 0;
while (count < 5) {print(count)count += 1
}

3.3 do-while 循环

do {// 循环体
} while (condition);

示例:

int i = 0;
do {console.log(i);i++;
} while (i < 5);

4. goto 语句

goto 语句允许直接跳转到程序中的标记位置。

if (condition) {goto label;
}// 其他代码label:
// 标记位置的代码

示例:

x = 0if x == 0:goto exit# 其他代码exit:
# 退出标记

5. 控制语句的嵌套

控制语句可以嵌套,形成复杂的逻辑结构。

示例:

for (int i = 0; i < 3; i++) {if (i == 0) {System.out.println("i 是 0");} else {System.out.println("i 不是 0");}
}

三、函数

当谈论C++编程时,函数是一个非常重要的概念。函数允许我们将代码组织成可重用的模块,提高代码的可读性和维护性。包括函数的定义和调用、函数参数传递、调用机制、函数地址和指针、内联与重载、以及多文件程序和命名空间。

1. 函数的定义和调用

在C++中,函数的定义包括函数名、返回类型、参数列表和函数体。下面是一个简单的例子:

// 函数的定义
int add(int a, int b) {return a + b;
}int main() {// 函数的调用int result = add(3, 5);return 0;
}

2. 函数参数传递

C++支持多种函数参数传递方式,包括值传递、引用传递和指针传递。看下面的例子:

// 值传递
void incrementByValue(int x) {x++;
}// 引用传递
void incrementByReference(int &x) {x++;
}// 指针传递
void incrementByPointer(int *x) {(*x)++;
}int main() {int num = 10;incrementByValue(num);// num的值不变incrementByReference(num);// num的值加1incrementByPointer(&num);// num的值再次加1return 0;
}

3. 调用机制

C++函数调用机制涉及栈和堆的管理,以及函数的入栈和出栈过程。这是一个复杂的话题,我们将简要介绍。函数的调用涉及以下步骤:

  • 将参数推送到栈上
  • 跳转到函数的地址
  • 执行函数体
  • 将结果返回给调用者

4. 函数地址和指针

在C++中,函数也有地址,可以通过函数指针来调用函数。下面是一个示例:

// 函数指针的声明
int (*addPointer)(int, int);// 函数指针的赋值
addPointer = &add;// 使用函数指针调用函数
int result = addPointer(3, 5);

5. 内联与重载

内联函数可以提高函数调用的效率,而函数重载允许我们定义多个同名函数,根据参数的类型和数量进行区分。看下面的例子:

// 内联函数
inline int multiply(int a, int b) {return a * b;
}// 函数重载
int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}

6. 多文件程序和命名空间

在大型项目中,将代码分为多个文件是一种良好的实践。同时,命名空间可以避免命名冲突。示例如下:

文件1: math_functions.h

namespace Math {int add(int a, int b);double multiply(double a, double b);
}

文件2: math_functions.cpp

#include "math_functions.h"namespace Math {int add(int a, int b) {return a + b;}double multiply(double a, double b) {return a * b;}
}

文件3: main.cpp

#include "math_functions.h"int main() {int result = Math::add(3, 5);double product = Math::multiply(2.5, 4.0);return 0;
}

四、数组和动态存储

在编程中,数组是一种基本的数据结构,用于存储相同类型的元素。对于一维数组、二维数组、指针数组、动态存储以及C++中的vector和string类。将通过例子和表格演示它们的用法和区别。

1. 一维数组

一维数组是具有相同数据类型的元素的有序集合。声明和初始化一个一维整数数组的示例:

int arr[5] = {1, 2, 3, 4, 5};

2. 二维数组

二维数组是包含行和列的数组。下面是一个2x3的整数二维数组的声明和初始化:

int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};

3. 指针数组

指针数组是一个数组,其中的元素是指针。以下是一个包含指向整数的指针的数组的示例:

int a = 5, b = 10, c = 15;
int* ptrArr[3] = {&a, &b, &c};

4. 动态存储

动态存储允许在运行时分配内存。使用new关键字在堆上动态分配内存:

int* dynamicArr = new int[5];
dynamicArr[0] = 10;
dynamicArr[1] = 20;
// ... 使用动态数组
delete[] dynamicArr; // 释放内存

5. Vector类

C++中的std::vector是一个动态数组,可以自动调整大小。以下是一个使用vector的示例:

#include <vector>
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // 添加元素

6. String类

C++中的std::string是处理字符串的类。以下是一个使用string的示例:

#include <string>
std::string str = "Hello, World!";

7.比较

在下表中,对这些数组和动态存储的不同方面进行了比较:

特性一维数组二维数组指针数组动态存储Vector类String类
声明与初始化int arr[5];int matrix[2][3];int* ptrArr[3];int* dynamicArr = new int[5];std::vector vec;std::string str;
内存管理动态增长
大小可变性静态静态静态动态动态动态

五、集合与结构

集合与结构是两个基本而重要的概念。包括位运算、集合基本运算、结构的定义与访问,以及结构数组和链表的应用。通过例子和表格,将介绍这些概念。

1. 位运算

位运算是在二进制位上执行操作的一种技术。以下是一些常见的位运算操作:

1.1 与运算(AND)

int result = a & b; // 将a和b的每个对应位进行与运算

1.2 或运算(OR)

int result = a | b; // 将a和b的每个对应位进行或运算

1.3 异或运算(XOR)

int result = a ^ b; // 将a和b的每个对应位进行异或运算

2. 集合基本运算

集合是一个独特的数据结构,常用于存储不重复的元素。以下是一些集合的基本运算:

2.1 并集

set<int> unionSet = setA;
unionSet.insert(setB.begin(), setB.end());

2.2 交集

set<int> intersectionSet;
set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(), inserter(intersectionSet, intersectionSet.begin()));

2.3 差集

set<int> differenceSet;
set_difference(setA.begin(), setA.end(), setB.begin(), setB.end(), inserter(differenceSet, differenceSet.begin()));

3. 结构的定义与访问

结构是一种用户自定义的数据类型,可以包含不同类型的数据。以下是结构的定义和访问:

struct Point {int x;int y;
};Point p1;
p1.x = 10;
p1.y = 20;

4. 结构数组和链表

4.1 结构数组

结构数组是一组相同类型的结构的集合。以下是一个点的结构数组的例子:

Point pointsArray[5];
pointsArray[0].x = 1;
pointsArray[0].y = 2;
// 其他元素的赋值类似

4.2 链表

链表是一种动态数据结构,它可以动态增长和缩小。以下是一个简单链表的例子:

struct Node {int data;Node* next;
};Node* head = new Node();
head->data = 1;
head->next = new Node();
head->next->data = 2;
head->next->next = nullptr;

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

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

相关文章

搜索二维矩阵 II(LeetCode 240)

1.问题描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10…

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法,fudai shiyong ijaoben

介绍 viralcc是一个基因组病毒分析工具&#xff0c;可以用于快速、准确地检测和分类病毒序列。 github&#xff1a;dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…

ubuntu的boot分区被删除恢复

在鼓捣黑苹果的时候&#xff0c;误删了ubuntu的boot分区&#xff0c;进系统的时候出现emergency mode&#xff0c;那么现在来讲讲怎么恢复 首先做一个ubuntu的启动盘&#xff0c;然后进入启动盘的系统选择试用 呼出命令行&#xff0c;然后添加一个源 sudo add-apt-repository…

207.【2023年华为OD机试真题(C卷)】小朋友来自多少小区(贪心算法实现-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-小朋友来自多少小区二.解题思路三.题解代码Pyt…

微众区块链观察节点的架构和原理 | 科普时间

践行区块链公共精神&#xff0c;实现更好的公众开放与监督&#xff01;2023年12月&#xff0c;微众区块链观察节点正式面向公众开放接入功能。从开放日起&#xff0c;陆续有多个观察节点在各地运行&#xff0c;同步区块链数据&#xff0c;运行区块链浏览器观察检视数据&#xf…

flutter项目用vscode打包apk包,完美运行到手机上

1.创建密钥库 执行以下命令: keytool -genkey -v -keystore F:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天) 2.填写密钥内容 执行以上命令后会提示一次输入密钥库密码、确认…

【ES6语法学习】解构赋值

文章目录 引言一、什么是解构赋值1.1什么是解构赋值1.2 数组的解构赋值1.2.1 基本用法1.2.2 默认值1.2.3 剩余参数 1.3 对象的解构赋值1.3.1 基本用法1.3.2 默认值1.3.2 剩余参数 1.4 字符串的解构赋值1.5 函数参数的解构赋值 二、解构赋值的优势和应用场景2.1 代码简化和可读性…

【React系列】JSX核心语法和原理

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. ES6 的 class 虽然目前React开发模式中更加流行hooks&#xff0c;但是依然有很多的项目依然是使用类组件&#x…

es索引数据过滤查询

1.我们往kibana插入数据,来进行查询 POST /t1/_doc/ {"name":"cat","age":"18","address":"BJ","job":"dev" } POST /t1/_doc/ {"name":"dog","age":"1…

改善 GitHub Pages 阅读体验:Quick Docs

一个不到 10MB 的小工具&#xff0c;来提供本地、快速的文档访问&#xff0c;来改善开发过程中&#xff0c;阅读在线文档体验糟糕的问题。 以及&#xff0c;介绍如何快速制作一个利于分发使用的&#xff0c;离线文档工具包。 写在前面 即使现在 AI 辅助编码和 Chat Bot 类的…

【git使用】了解三种git commit合并的使用场景(rebase、merge、cherry-pick)

参考 【Git学习笔记】逃不掉的merge和rebase-腾讯云开发者社区-腾讯云git merge 和 git rebase - 知乎git cherry-pick 教程 - 阮一峰的网络日志 简单理解各种合并的方法 线性合并&#xff0c;使用 rebase —— feature 分支开发&#xff0c;提交前拉取 master 最新改动进行…

Qt QDialog基本操作

窗口界面处理 setGeometry(x, y, maindowX, maindowY)&#xff1a;设置窗口初始化位置&#xff1b; x&#xff1a;界面起始横坐标 y&#xff1a;界面起始纵坐标 maindowX&#xff1a;界面宽度 maindowY&#xff1a;界面高度 去除右上角 close/缩放按钮 setWindowFlags(Qt::…

初识HTTP协议

Web服务器可以接收浏览器的请求&#xff0c;并将服务器中的web项目资源响应给浏览器&#xff0c;浏览器与服务器之间进行网络通信遵循HTTP协议。 一、什么是HTTP协议 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol&#xff09;(浏览器---->web服务…

C/C++汇编学习(三)——指令集-汇编基础

汇编语言是一种用于与计算机硬件直接交互的低级编程语言。它非常接近机器语言&#xff0c;但提供了更易于理解的符号来表示机器指令和数据。不同的处理器架构有不同的汇编语言。例如&#xff0c;x86架构用于大多数个人电脑&#xff0c;而ARM架构常见于移动设备。 目录 1. 指令…

微信小程序:flex常用布局

在我们平时微信小程序开发过程中为了页面能达到设计小伙伴的预期&#xff0c;追求还原度&#xff0c;那我们肯定会使用很多常用的布局方式&#xff0c;那我们今天就介绍一下微信小程序中常用的一些flex布局 1、常用flex布局 /** 水平垂直居中 **/ .flex-center {display: fle…

vue3+vant4 移动端软键盘弹出 收起导致项目样式布局错乱解决方案,亲测有效!!

问题描述 最近在做vue3 H5的移动端项目 我用的是vue3vant4&#xff0c;然后在使用过程中发现 小米14手机在点击密码输入框软键盘弹出 时会导致项目布局整体向上移动 导致页面布局错乱。 原因分析&#xff1a; 在移动端软键盘弹出收起时&#xff0c;导致项目样式布局错乱的原因…

基于STM32的ESP8266 WiFi模块数据采集与显示

基于STM32的ESP8266 WiFi模块数据采集与显示是一种常见的嵌入式系统应用&#xff0c;通常用于远程数据监测和控制。在这种应用中&#xff0c;STM32作为主控制器负责采集周围环境的数据&#xff0c;通过ESP8266 WiFi模块将数据发送到远程服务器&#xff0c;并在远程服务器上进行…

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…

小梅哥Xilinx FPGA学习笔记20——无源蜂鸣器驱动设计与验证(音乐发生器设计)

目录 一&#xff1a;章节导读 二&#xff1a;无源蜂鸣器驱动原理 三&#xff1a;PWM 发生器模块设计 3.1 PWM 发生器模块框图 3.2 PWM 发生器模块接口功能描述 3.3 PWM波生成设计文件代码 3.4 测试仿真文件 3.5 测试仿真结果 3.6 板级调试与验证之顶层文件设计 四&am…

Python:界面开发,wx入门篇

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/3Yb_YAKiMte_f5HanetXiA 本文大概 3617 个字&#xff0c;阅读需花 10 分钟 内容不多&#xff0c;但也花了一些精力 如要交流&#xff0c;欢迎评…