20240408,C++数组,函数,指针

是谁说回老家学习结果摆烂了两天,是我,Π—Π! Π—Π!! 

一,数组——同C

1.1一维数组

1.0   相同类型,连续内存,
1.1   定义格式:数据类型 数组名【长度】;数组类型 数组名【长度】={1,2,3,……};数组类型 数组名【】={1,2,3,……};
1.2   遍历数组,初始化,下标【0-N】
1.3   数组名:数组内存长度,数组首地址

#include <iostream>
using namespace std;
int main()
{int arr[] = { 1,2,4,5,6,7,8 };for (int i = 0; i < 7; i++){cout <<i<<"  " << arr[i] << "\t";//arr[8]未定义?强行输出会输出某超小负数cout << "arr[]——" << &arr[i] << endl;cout << "arr[]——" << (int)&arr[i] << endl;}cout << endl;cout << "数组大小" << sizeof(arr) << endl;cout << "数组每个元素大小" << sizeof(arr[1]) << endl;cout << "数组元素个数" << sizeof(arr)/sizeof(arr[1]) << endl;//取地址cout << "arr——" << arr << endl;cout << "arr——" << (int)arr << endl;//十六进制地址强转为十进制return 0;system("pause");
}
1.1.1 冒泡排序

冒泡排序是两轮循环,对比轮数==数组大小—1;每轮对比次数==数组大小—当前轮数—1;

for (int i = 0; i < 9-1; i++)//错误,只走了一层循环
{if (a[i] > a[i + 1]){a[i] +=a[i + 1];a[i+1] = a[i] - a[i+1];a[i] = a[i] - a[i + 1];if (i == sizeof(a) / sizeof(a[0]) - 1 - i){break;}}
}
#include <iostream>//正确
using namespace std;
int main()
{int a[9] = { 4,2,8,0,5,7,1,3,9 };//cout << sizeof(a) / sizeof(a[0]) << endl;for (int i = 0; i < 9-1; i++){for (int j = 0; j < 9 - i - 1; j++){if (a[j] > a[j + 1]){a[j] += a[j + 1];a[j + 1] = a[j] - a[j + 1];a[j] -= a[j + 1];}}}for (int t = 0; t < 9; t++){cout << a[t] << endl;}return 0;system("pause");
}
1.2 二维数组

同C ,数组定义:四种,行可以省,列不能

#include <iostream>
using namespace std;
int main()
{int A[3][5];int B[2][3] = { {1,3,3},{2,2,2} };int C[2][2] = { 2,33,4,3, };int D[][3] = { 2,33,4,3 };cout <<"数组B内存空间\t"<< sizeof(B) << endl;cout << "数组B一个元素占内存空间\t"<<sizeof(B[0][0]) << endl;cout << "数组B一行占内存空间\t" << sizeof(B[0]) << endl;cout << "数组B行数\t" << sizeof(B) / sizeof(B[0]) << endl;cout << "数组B列数\t" << sizeof(B[0]) / sizeof(B[0][0]) << endl;cout << B << endl;cout << (int)B << endl;cout << &B[0][0] << endl;cout << (int)&B[0][0] << endl;cout << B[0] << endl;cout << (int)B[0] << endl;cout << B[1] << endl;cout << (int)B[1] << endl;cout << "每一个元素的地址" << endl;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << &B[i][j] << endl;cout << (int)&B[i][j] << endl;}}return 0;system("pause");
}
1.2.1统计成绩
#include <iostream>
#include<string>
using namespace std;
int main()
{int scores[3][3] = { {100,100,100},{90,50,100},{60,70,80} };//int SCORES[3] = { 0 };string names[3] = { "张三","李四","王五" };for (int i = 0; i < 3; i++){int sum = 0;cout << names[i];for (int y = 0; y < 3; y++){//SCORES[i] += scores[i][y];sum+= scores[i][y];}cout << sum << endl;}system("pause");
}

二,函数——同C

返回值类型,函数名,参数列表,函数体语句,RETURN表达式
实参,形参,值传递时,形参的改变不会影响实参
声明(可以多次),定义(一次),同C

分文件编写:.H头文件,写函数声明,.CPP源文件,写函数定义

#include<iostream>//头文件
using namespace std;int swap(int num1, int num2);
#include<iostream>//函数文件
#include "swap.h"
using namespace std;int swap(int num1, int num2)
{cout << "函数内交换前num1=" << num1 << endl;cout << "函数内交换前num2=" << num2 << endl;num1 += num2;num2 = num1 - num2;num1 = num1 - num2;cout << "函数内交换后num1=" << num1 << endl;cout << "函数内交换后num2=" << num2 << endl;return num1, num2;
}
#include<iostream>//文件
#include "swap.h"
using namespace std;int main()
{int a = 90;int b = 45;cout << "函数外交换前a=" << a << endl;cout << "函数外交换前b=" << b << endl;swap(a, b);cout << "函数外交换后a=" << a << endl;cout << "函数外交换后b=" << b << endl;return 0;system("pause");
}

三,指针——同C

数据类型 * 指针变量名,int * p=&a;
指针所占空间:32位4,64位8

#include<iostream>
using namespace std;int main()
{int a = 10;int* p = &a;cout << *p << endl;cout << p << endl;cout << sizeof(p) << endl;cout << sizeof(char*) << endl;cout << sizeof(float*) << endl;cout << sizeof(double*) << endl;return 0;system("pause");
}
 3.1  空指针和野指针

INT*P=NULL,不可访问,常用于初始化,0-255的内存编号系统占用
野指针,没有申请访问权限,不可访问

#include<iostream>
using namespace std;int main()
{int* p = NULL;//cout << *p << endl; 不可访问cout << p << endl;int* pp = (int*)0x1100;//cout << *p << endl;没有申请权限cout << pp << endl;return 0;system("pause");
}
3.2 常量指针&指针常量

const int*p,常量指针,指针指向的值不能修改,指针的指向可以该,就是这类指针只能访问,不能修改
int *const p,指针常量,指向不可修改,指向的数据可以访问和修改【即P的地址的数值不可修改
const int * const p,指向和数据都不可以修改,只能访问
const后面紧跟的是指针还是常量,指针-常量指针,常量-指针常量

#include<iostream>
using namespace std;int main()
{int a = 90;int b = 100;const int* p = &a;cout << p << endl;cout << *p << endl;a = 111;cout << p << endl;cout << *p << endl;//*p = 222;不可以p = &b;cout << p << endl;cout << *p << endl;cout << endl;int * const pp = &a;cout << pp << endl;cout << *pp << endl;//pp = &b;不可以,指向不可修改*pp = 77;cout << pp << endl;cout << *pp << endl;const int* const ppp = &a;cout << ppp << endl;cout << *ppp << endl;//ppp = &b;//*ppp = 44;//指向不可以修改,数据只能访问不可以修改return 0;system("pause");
}
 3.3 指针和数组
#include<iostream>
using namespace std;int main()
{int a[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = a;cout << "第1个数组元素访问——" << *p << endl;p++;cout << "第2个数组元素访问——" << *p << endl;p = a;//遍历数组1for (int i = 0; i < 10; i++){//cout << a[i] << " ";cout << *p << " ";p++;}cout << endl;p = a;//遍历数组2for (int i = 0; i < 10; i++){cout << p[i] << " ";}cout << endl;return 0;system("pause");
}
3.4 指针和函数——地址传递(可以改变实参) 
#include<iostream>//头文件
using namespace std;int swap(int *num1, int *num2);
#include<iostream>//函数文件
#include "swap.h"
using namespace std;int swap(int *num1, int *num2)
{cout << "函数内交换前*num1=" << *num1 << endl;cout << "函数内交换前*num2=" << *num2 << endl;*num1 += *num2;*num2 = *num1 - *num2;*num1 = *num1 - *num2;cout << "函数内交换后*num1=" << *num1 << endl;cout << "函数内交换后*num2=" << *num2 << endl;return *num1, *num2;
}
#include<iostream>//文件
#include "swap.h"
using namespace std;int main()
{int a = 90;int b = 45;cout << "函数外交换前a=" << a << endl;cout << "函数外交换前b=" << b << endl;swap(&a, &b);cout << "函数外交换后a=" << a << endl;cout << "函数外交换后b=" << b << endl;return 0;system("pause");
}
 3.5 指针,数组,函数——例:冒泡排序函数版
#include<iostream>//头文件
using namespace std;void bubblesort(int* p,int n);
#include<iostream>//函数文件
#include "bubblesort.h"
using namespace std;void bubblesort(int* p,int n) 
{for (int i = 0; i < n - 1; i++){for (int y = 0; y < n - 1 - i; y++){if (p[y] > p[y + 1]){p[y] += p[y + 1];p[y + 1] = p[y] - p[y + 1];p[y] -= p[y + 1];}}}
}

 

#include<iostream>//文件
#include "bubblesort.h"
using namespace std;int main()
{int a[9] = { 4,2,8,0,5,7,1,3,9 };bubblesort(a, 9);for (int i = 0; i < 9; i++){cout << a[i] << endl;}return 0;system("pause");
}

 学了才知道和C一样,咱就是说,咱不敢跳啊
不过二倍速很快的

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

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

相关文章

uni-app(H5)论坛 | 社区 表情选择 UI组件

项目源码请移步&#xff1a;bbs 效果 实现思路 表情切换 人物、动物、小黄人不同表情之间的切换实际就是组件的切换 emoji表情 emoji表情本身就是一种字符 如需其他emoji表情可参考 EmojiAll中文官方网站 需要注意的就是数据库的存储格式需要支持emoji表情&#xff0c;我项…

第8章 数据集成和互操作

思维导图 8.1 引言 数据集成和互操作(DII)描述了数据在不同数据存储、应用程序和组织这三者内部和之间进行移动和整合的相关过程。数据集成是将数据整合成物理的或虚拟的一致格式。数据互操作是多个系统之间进行通信的能力。数据集成和互操作的解决方案提供了大多数组织所依赖的…

配置交换机 SSH 管理和端口安全——实验1:配置交换机基本安全和 SSH管理

实验目的 通过本实验可以掌握&#xff1a; 交换机基本安全配置。SSH 的工作原理和 SSH服务端和客户端的配置。 实验拓扑 交换机基本安全和 SSH管理实验拓扑如图所示。 交换机基本安全和 SSH管理实验拓扑 实验步骤 &#xff08;1&#xff09;配置交换机S1 Switch>enab…

【r-tree算法】一篇文章讲透~

目录 一、引言 二、R-tree算法的基本原理 1 数据结构 2 插入操作 3 删除操作 4 查询操作 5 代码事例 三、R-tree算法的性能分析 1 时间复杂度 2 空间复杂度 3 影响因素 四、R-tree算法的变体和改进 1 R*-tree算法 2 X-tree算法 3 QR-tree算法 五、R-tree算法的…

axure谷歌插件(直接下载)

axure谷歌插件 在网上找一个谷歌的axure&#xff0c;不是登陆就是收费&#xff0c;离谱。找了好久才找到这个&#xff0c;我下载保存到网盘了&#xff0c;直接下载就ok&#xff0c;永久无提取码。 下载插件文件&#xff0c;打开开发者模式&#xff0c;直接拖进来就ok。 网盘…

esxi上给centos7虚拟机扩容硬盘

原来centos7硬盘分配的空间只有40GB 需要直接扩容到200GB 扩容前 扩容后 扩容步骤&#xff1a; 1 .在esxi平台上关机虚拟机&#xff0c;将硬盘调整为200GB&#xff0c;然后开机 2.请出chatGPT 1. 创建新分区 使用剩余的磁盘空间创建一个新的分区。你可以使用fdisk&#xf…

Flink Keyed State的优化与实践

本期作者 1.背景 Flink SQL在业务使用中有较多的双流join场景&#xff0c;当左右流的流量都较大&#xff0c;Join的等待时间即使为1小时&#xff0c;Flink Keyed State&#xff08;Flink State分Operator State和Keyed State&#xff0c;后文所有State均代表后者&#xff09;的…

数据库(mysql)-基本查询语句(DQL)

查询语句 这边查询是给予一定表格,这边先做个解释 教师表包括(name(姓名),gender(性别),salary(工资),title(职位),subject_id(课程的编号),comm(奖金)) 学生表包括(姓名(name),gender(性别),job(职位),生日(birth)) 模版 SELECT 字段名 FROM 查询表 WHERE 查询语句 或与非…

k8s_入门_命令详解

命令详解 kubectl是官方的CLI命令行工具&#xff0c;用于与 apiserver进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver能识别的信息&#xff0c;进而实现管理k8s各种资源的一种有效途径 1. 帮助 2. 查看版本信息 3. 查看资源对象等 查看No…

Linux应用开发(3):Linux时间操作(time、mktime、localtime等)

1. 简述 在Linux系统中&#xff0c;时间操作函数是编程中经常使用的一部分&#xff0c;它们允许程序获取和设置系统时间&#xff0c;以及对时间进行各种处理。以下是一些常用的时间操作函数的详细介绍。 2. 时间操作 &#xff08;1&#xff09;time(): 获取1970年1月1日以来的…

爬虫入门教程(一)

爬虫入门教程 1.什么是爬虫 爬虫是一种自动获取网站数据的程序或脚本。它可以自动模拟人类访问网站,获取网页源代码,解析并提取出所需的数据。 爬虫的工作原理类似于搜索引擎的索引程序&#xff0c;它们会按照预定的规则和算法在互联网上不断地爬取网页&#xff0c;收集信息…

k8s知识

k8s是用于容器编排和管理的&#xff0c;docker或者ctr是k8s的运行时&#xff0c;k8s通过容器运行时来启动容器&#xff0c;容器启动需要镜像&#xff0c;镜像可以用docker构建&#xff0c;dockerfile就是用于自定义如何构建镜像&#xff0c;所以上面那套流水线就是先用dockerfi…

Linux|从 STDIN 读取 Awk 输入

简介 在之前关于 Awk 工具的系列文章中&#xff0c;主要探讨了如何从文件中读取数据。但如果你希望从标准输入&#xff08;STDIN&#xff09;中读取数据&#xff0c;又该如何操作呢&#xff1f; 在本文中&#xff0c;将介绍几个示例&#xff0c;展示如何使用 Awk 来过滤其他命令…

即插即用篇 | YOLOv8引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块

本改进已集成到 YOLOv8-Magic 框架。 下采样操作如最大池化或步幅卷积在卷积神经网络(CNNs)中被广泛应用,用于聚合局部特征、扩大感受野并减少计算负担。然而,对于语义分割任务,对局部邻域的特征进行池化可能导致重要的空间信息丢失,这有助于逐像素预测。为了解决这个问题…

mysql 查询变量@i:=@i+1

学习完mysql的查询&#xff1a;基本查询&#xff0c;连接查询和子查询和mysql 正则表达式查询&#xff0c;接下来先学习下变量查询。 mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量&#xff0c;后面应用起来就更清晰。 1&#xff0…

“弱智吧”才是人类面对AI的最后一道堡垒

在 AI 的研究领域中&#xff0c;语言模型的训练数据选择一直是一个关键问题。传统的智慧告诉我们&#xff0c;高质量的数据集应该是由专家精心挑选和校对的文本组成&#xff0c;以确保模型学习到的语言是规范、准确、有文化内涵的。 然而&#xff0c;最近的一项研究颠覆了这一观…

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 在日常使用Java的时候&#xff0c;我们都接触过new这个关键字&#xff0c;那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢&#xff1f; 实际上要去判断一个类的初始化的顺序&#xff0c;需要分一下情况&…

Bean的默认名称

1.使用spring的注解 Component、Repository、Service、Controller 等注解去把一个类配置为bean时&#xff0c;如果不指定bean的名称&#xff0c;那么bean的名称的默认规则是&#xff1a; ①类名的首字母小写&#xff0c;例如&#xff1a;类名称 UserDao &#xff0c;那么默认的…

C++笔记:STL容器库的使用

前置&#xff1a; 对于stl容器库&#xff0c;我只做了一些常用的笔记&#xff0c;关于更详细的使用可以参考:https://cppreference.com/https://cppreference.com/ 一.string--字符串 对于C中string字符串会比C语言的字符数组使用起来会顺手许多。 命名空间&#xff1a;std 关于…

使用串口给ESP8266发送AT指令无反应解决

解决方法&#xff1a;重新烧录固件 设置PC机波特率 设置PC机上的端口波特率和flash下载工具中的波特率一致&#xff0c;否则flash下载工具会一直提示串口连接失败。我这里将PC机上的串口波特率设置为115200&#xff0c;然后flash下载工具波特率也设置为115200 Windows系统上…