C++知识点笔记

二维数组

定义方式

1、数据类型 数组名[行数][列数];

2、数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}};

3、数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};

4、数据类型 数组名[][列数]={数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性

int main0() {//方式1//数据类型 数组名[行数][列数];int arr[2][3];arr[0][0] = 1;arr[0][1] = 1;arr[0][2] = 1;arr[1][0] = 1;arr[1][1] = 1;arr[1][2] = 1;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {cout << arr[i][j] << " ";}cout << endl;}//推荐!更直观可读性强//方式2//数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}};int arr2[2][3] ={{1,2,3},{4,5,6}};//方式3//数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};int arr3[2][3] = { 1,2,3,4,5,6 };//方式4 //数据类型 数组名[][列数]={数据1,数据2,数据3,数据4};int arr4[][3] = { 1,2,3,4,5,6 };system("pause");return 0;
}

二维数组数组名

  • 查看二维数组所占内存空间

  • 获取二维数组首地址

int main0() {//二维数组名称用途//1.可以查看占用内存空间大小int arr[2][3] ={{1,2,3},{4,5,6}};cout << "二维数组所占内存空间为:" << sizeof(arr) << endl;//24  4*6cout << "二维数组第一行所占内存空间为:" << sizeof(arr[0]) << endl;//12  4*3cout << "二维数组第一个元素所占内存空间为:" << sizeof(arr[0][0]) << endl;//4 cout << "二维数组的行数为" << sizeof(arr) / sizeof(arr[0]) << endl;//2cout << "二维数组的列数为" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;//3//2.可以查看二维数组的首地址cout << "二维数组的首地址为" << arr << endl;cout << "二维数组的第一行首地址为" << (int)arr[0] << endl;cout << "二维数组的第二行首地址为" << (int)arr[1] << endl;cout << "二维数组的第一个元素首地址为" << (int)&arr[0][0] << endl;cout << "二维数组的第二个元素首地址为" << (int)&arr[0][4] << endl;system("pause");return 0;
}
/*考试成绩统计
* 有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
*				语文		数学		英语
*	张三		100			100			100
*	李四		90			50			100
*	王五		60			70			80
* 
* 
* 1.创建二维数组:3行3列
* 2.统计考试成绩:让每行的三列相加求和
*
*/
int main() {int arr[3][3] ={{100,100,100},{90,50,100},{60,70,80}};int sum = 0;string names[3] = { "张三","李四","王五" };for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {sum += arr[i][j];}cout << names[i]<<"总分为"<<sum << endl;sum = 0;}system("pause");return 0;
}

函数

作用:将一段经常使用的代码封装起来,减少重复代码

一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能

函数的定义

1.返回值类型

2.函数名

3.参数列表

4.函数体语句

5,return表达式

语法:

返回值类型 函数名 (参数列表)

{

函数体语句

return表达式

}

在这里插入图片描述在这里插入图片描述

函数的调用

功能:使用定义好的函数

语法:函数名 (参数)

//函数定义
int add(int num1, int num2)//定义中num1,num2称为形式参数,简称形参
{int sum = num1 + num2;return sum;
}
int main() {int a = 10;int b = 10;//调用add函数int sum = add(a, b);//调用时的a,b称为实际参数,简称实参cout << "sum=" << sum << endl;a = 100;b = 100;int sum2 = add(a, b);cout << "sum2=" << sum2 << endl;system("pause");return 0;
}

值传递

  • 函数调用时实参将数值传给形参

  • 值传递时,如果形参发生变化,不会影响实参
    在这里插入图片描述

//定义函数,实现两个数字进行交换函数//如果函数不需要返回值,声明的时候返回值写void
void swap(int num1, int num2) {cout << "交换前:" << endl;cout << "num1=" << num1 << endl;cout << "num2=" << num2 << endl;int temp = num1;num1 = num2;num2 = temp;cout << "交换后:" << endl;cout << "num1=" << num1 << endl;cout << "num2=" << num2 << endl;//return; 当函数声明的时候,不需要返回值,可以不写reurn
}int main() {int a = 10;int b = 20;cout << "a=" << a << endl;cout << "b=" << b << endl;//值传递时,函数的形参发生改变,并不会影响实参swap(a, b);cout << "a=" << a << endl;cout << "b=" <<b<< endl;system("pause");return 0;
}

函数的常见样式

1.无参无返

2.有参无返

3.无参有返

4.有参有返

函数的声明

作用:告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义

  • 函数的声明可以多次,但函数的定义只有一次,一般声明也只写一次

函数的分文件编写

作用:让代码结构更加清晰

函数分文件编写一般有4个步骤

1.创建后缀名为.h的头文件

2.创建后缀名为.cpp的源文件

3.在头文件中写函数的声明

4.在源文件中写函数的定义

#include<iostream>
using namespace std;
//函数的声明
void swap(int a, int b);
#include "swap.h"//函数的定义
void swap(int num1, int num2) {int temp = num1;num1 = num2;num2 = temp;cout << "num1=" << num1 << endl;cout << "num2=" << num2 << endl;}
#include<iostream>
using namespace std;
#include "swap.h"//函数的声明
//void swap(int a, int b);//函数的定义
//void swap(int num1, int num2) {
//
//	int temp = num1;
//	num1 = num2;
//	num2 = temp;
//
//	cout << "num1=" << num1 << endl;
//	cout << "num2=" << num2 << endl;
//
//}//1.创建后缀名为.h的头文件//2.创建后缀名为.cpp的源文件//3.在头文件中写函数的声明//4.在源文件中写函数的定义int main() {int a = 10;int b = 20;cout << "a=" << a << endl;cout << "b=" << b << endl;//值传递时,函数的形参发生改变,并不会影响实参swap(a, b);cout << "a=" << a << endl;cout << "b=" << b << endl;system("pause");return 0;
}

指针

指针的作用:可以通过指针简介访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示

  • 可以利用指针变量保存地址

指针变量定义和使用

指针变量定义语法:数据类型*变量名;

int main() {//1.定义指针int a = 10;//指针定义的语法:数据类型 * 指针变量名int * p;//让指针记录变量a的地址p = &a;cout << "a的地址为:" << &a << endl;cout << "指针p=" << p << endl;cout << "*p=" << *p << endl;//10//2.使用指针//可以通过解引用的方式来找到指针指向的内存//指针前加 * 代表解引用找到指针指向的内存中的数据*p = 1000;cout << "a=" << a << endl;//1000cout << "*p=" << *p << endl;//1000system("pause");return 0;
}

指针所占内存空间

在32为操作系统下:占用4个字节空间,64位下占8个字节。

int main() {//指针所占内存空间int a = 10;//int * p;//p = &a;int* p = &a;cout << "sizeof(int*) =" << sizeof(p) << endl;//8cout << "sizeof(float*) =" << sizeof(float *) << endl;//8cout << "sizeof(double*) =" << sizeof(double *) << endl;//8cout << "sizeof(char*) =" << sizeof(char *) << endl;//8system("pause");return 0;
}

空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

int main() {//空指针//1.空指针用于给指针变量进行初始化int* p = NULL;//2.空指针是不可以进行访问的//0~255之间的内存编号是系统占用的因此不可以访问//cout << *p << endl;报错//*p = 100;报错system("pause");return 0;
}

野指针:指变量指向非法的内存空间

const修饰指针

const修饰指针 — 常量指针:指针的指向可以修改,但是指针指向的值不可以改

const int * p = &a;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

const修饰常量 — 指针常量:指针的指向不可以改,但是指针指向的值可以改

int * const p2 = &a;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

const既修饰指针,又修饰常量:指针的指向和指针指向的值都不可以改

const int * const p3 = &a;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

指针和数组

作用:利用指针访问数组中元素

int main() {//指针和数组//利用指针访问数组中的元素int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };cout << "第一个元素为:" << arr[0] << endl;int* p = arr;//arr就是数组首地址cout << "利用指针访问第一个元素:" << *p << endl;p++;//让指针向后偏移4个字节cout << "利用指针访问第二个元素:" << *p << endl;cout << "利用指针遍历数组" << endl;int* p2 = arr;for (int i = 0; i < 10; i++) {//cout<<arr[i]<<endlcout << *p2 << endl;p2++;}system("pause");return 0;

指针和函数

作用:利用指针作函数参数,可以修改实参的值

如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

//实现两个数字进行交换
void swap01(int num1, int num2) {int temp = num1;num1 = num2;num2 = temp;cout << "交换后:" << endl;cout << "num1=" << num1 << endl;cout << "num2=" << num2 << endl;
} void swap02(int* p1, int* p2) {int temp = *p1;*p1 = *p2;*p2 = temp;
}int main() {//指针和函数//1.值传递int a = 10;int b = 20;//swap01(a, b);//值传递不会改变实参//2.地址传递//如果是地址传递,可以改变实参swap02(&a, &b);cout << "a=" << a << endl;cout << "b=" << b << endl;system("pause");return 0;
}

指针、数组、函数

#include<iostream>
using namespace std;/*
* 封装一个函数,利用冒泡排序,实现对整型数组的升序排序
* 例如数组:int arr[10] = {4,3,6,9,1,2,10,8,7,5};
* 
*///	参数1 数组的首地址  参数2 数组长度
void bubbleSort(int * arr, int len) {//int * arr 也可以写为int arr[]for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {//如果j>j+1的值 交换数字if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}//打印数组
void printArray(int * arr, int len) {for (int i = 0; i < len; i++){cout<<arr[i]<<endl;}
}int main() {//1.创建数组//2.创建函数,实现冒泡排序//3.打印排序后的数组//1.创建数组int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };//数组长度int len = sizeof(arr) / sizeof(arr[0]);// 2.创建函数,实现冒泡排序bubbleSort(arr, len);//3.打印排序后的数组printArray(arr, len);system("pause");return 0;
}

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

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

相关文章

React中使用LazyBuilder实现页面懒加载方法二

前言&#xff1a; 在一个表格中&#xff0c;需要展示100条数据&#xff0c;当每条数据里面需要承载的内容很多&#xff0c;需要渲染的元素也很多的时候&#xff0c;容易造成页面加载的速度很慢&#xff0c;不能给用户提供很好的体验时&#xff0c;懒加载是优化页面加载速度的方…

springboot 优雅使用函数式编程处理 websocket @OnMessage 消息

背景 现在大多业务功能使用 socket.io实现长连接&#xff0c;但是部分第三方设备对接 只支持基础的websocket。 spring中使用基础的websocket, OnMessage 收到消息&#xff0c;对消息的处理&#xff0c;if else 将会繁琐&#xff0c;难以维护。 本文仅介绍了如何使用enum枚举、…

yarn的安装

下载node.js&#xff0c;使用npm安装 #先加载本地安装 yarn install --offline//安装 npm install -g yarn yarn --version //查看版本 npm install -g yarn //安装安装node.js,下载yarn的安装程序: Yarn 淘宝源安装&#xff0c;分别复制粘贴以下代码行到黑窗口运行即可 …

考研机试 谁是你潜在的朋友

描述 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男&#xff0c;你发现自己与他人相互了解的机会并不太多。幸运的是&#xff0c;你意外得到了一份北大图书馆的图书借阅记录&#xff0c;于是你挑灯熬夜地…

Selenium wait element点击

场景&#xff1a;input单元格输入mail格式的字符串&#xff08;会进行字符串mail格式的校验&#xff09;&#xff0c;很快下方的button<next>才变绿可点击。 隐式等待&#xff1a;implicitly_wait method1: 点不上&#xff0c;这里有个坑&#xff0c;下面2种方式不能同时…

插槽(64-67)

文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容&#xff08;默认值&#xff09;3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…

qt学习:http+访问百度智能云api实现动物图片识别

目录 获取id key 编程步骤 配置ui界面 添加模块,头文件和定义变量 新建两个类,一个图像Image类,一个Http类,http类继承QObject类,并添加头文件并定义成员和函数 实现图像Image类,Http类的函数 在ui界面的cpp中添加全局变量,根据自己的应用来写,开头有获取方法

Java解决ReabbitMQ解决消息重复消费问题

RabbitMQ中解决消息重复消费的问题通常涉及到确保消息的幂等性和使用消息确认机制。以下是一些常见的解决方法&#xff1a; 消息去重&#xff1a;在消费者端实现消息的去重逻辑&#xff0c;例如使用数据库的唯一约束或者分布式锁来保证同一消息不会被处理多次。 消息确认&…

【投稿优惠|EI优质会议】2024年材料化学与清洁能源国际学术会议(IACMCCE 2024)

【投稿优惠|优质会议】2024年材料化学与清洁能源国际学术会议(IACMCCE 2024) 2024 International Conference Environmental Engineering and Mechatronics Integration(ICEEMI 2024) 一、【会议简介】 随着全球能源需求的不断增长&#xff0c;清洁能源的研究与应用成为了国际…

【npm包】如何发布自己的npm包

随着Node.js的普及&#xff0c;npm&#xff08;Node Package Manager&#xff09;已成为JavaScript开发者中不可或缺的一部分。发布自己的npm包&#xff0c;不仅可以将自己的项目分享给更多人&#xff0c;还可以为社区做出贡献。本文将详细介绍如何从零开始发布自己的npm包。 …

【JavaEE Spring】MyBatis 操作数据库 - 进阶

MyBatis 操作数据库 - 进阶 1. 动态SQL1.1 \<if>标签1.2 \<trim>标签1.3 \<where>标签1.4 \<set>标签1.5 \<foreach>标签1.6 \<include>标签 1. 动态SQL 动态 SQL 是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接…

想找一个轻量版的MarkDown编辑器客户端,哪位推荐一下

经常需要即时写一些MarkDown文档&#xff0c;打开网页版的笔记不方便。 对比了几个&#xff0c;已收费的typora感觉还是最好的。 除此之外&#xff0c;原以为最重的VSCode&#xff0c;从打开速度、占内存等情况来说&#xff0c;居然也不相上下。 这样的对比条件下&#xff0c;…

某赛通电子文档安全管理系统 hiddenWatermark/uploadFile 文件上传漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

常用命令-

Linux服务器命令 scp -P 1122 expdp_aram_prod230903_* root193.8.1.7:/oracle/app/oracle/move_data //跨服务器传输 chown -R oracle:oinstall /app/move_data //更改所属组 date -s 2022-11-11 18:58:30 //修改服务器时间 top //CPU使用率 df -h //磁盘…

趋势也有大小之分?现货白银趋势的简单介绍

在现货白银市场中要做顺势交易&#xff0c;首先要分析趋势&#xff0c;在这一步很多投资者懵逼了&#xff0c;因为有时他们搞不清当前趋势是什么&#xff0c;看起来像下跌&#xff0c;但又像上涨。其实这可能是投资者没搞清楚大趋势和小趋势的关系问题&#xff0c;下面我们就来…

数据结构——链表的实现(Java版)

目录 一、链表 二、代码实现 1.创建结点 2.构造函数 3.链表的相关属性 4.添加虚拟节点 5.判断链表是否为空 6.添加方法 &#xff08;1&#xff09;在头部添加 &#xff08;2&#xff09;在尾部添加 &#xff08;3&#xff09;在索引位置添加 &#xff08;4&#xff…

华为云OBS-文件上传

前端配合后端 采用临时上传 相关参考文档 使用临时URL进行授权访问_对象存储服务 OBS_BrowserJS_临时授权访问_华为云 选择文件方法 【 isPay 是否上传完毕】 handleChange(file, fileList) {this.active 0;this.json_data [];console.log(file, fileList);fileList.forEa…

LiveGBS流媒体平台GB/T28181常见问题-如何配置使用自己已有的redis服务替换redis版本升级redis版本

LiveGBS如何配置使用自己已有的redis服务替换redis版本升级redis版本 1、Redis服务2、如何切换REDIS?2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动 3、搭建GB28181视频直播平台 1、Redis服务 在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存…

Java二分查找-图文

一、二分查找概念 二分查找也叫折半查找&#xff0c;是在一组有序(升序/降序)的数据中查找一个元素&#xff0c;它是一种效率较高的查找方。 二、二分查找原理 1.二分查找的数组必须是有序数值型数组。 2.将想要查找的目标元素与查找范围内的中间元素进行比较&#xff0c;如果…

数据结构篇-01:单调栈

单调栈是栈的一种&#xff0c;可以使得每次新元素入栈后&#xff0c;栈内的元素都保持有序&#xff08;单调递增或者单调递减&#xff09;。 单调栈的用途不太广泛&#xff0c;只处理一类典型的问题&#xff0c;比如[下一个更大元素]、[上一个更小元素] 等。 在本文中&#x…