【C++】数组、函数、指针

文章目录

  • 1.数组
    • 1.1一维数组
    • 1.2二维数组
  • 2.函数
  • 3.指针:可以通过指针间接访问内存(指针记录地址)
    • 3.1 指针的定义和使用
    • 3.2 指针所占用空间
    • 3.3 空指针和野指针
    • 3.4 const修饰指针
    • 3.5指针和数组
    • 3.6指针和函数
    • 3.7练习(指针、数组、函数)

1.数组

//数组:就是集合,里面存放了相同类型的数据元素
//数组中的每个数据元素都是相同的数据类型
//数组是由连续的内存位置组成的

1.1一维数组

//一维数组定义的三种方式
//1.数据类型 数组名[数组长度];
//2.数据类型 数组名[数组长度]={值1,值2…}
//3.数据类型 数组名[]={值1,值2,…} 定义数组时,必须确定初始长度

//数组名的用途
//1.可以统计整个数组在内存中的长度 sizeof(arr) sizeof测出的单位是字节
//2.可以获取数组在内存中的首地址 元素的首地址位arr 第一个元素的地址是&arr[0]
//两个位置重合 挨着的元素的地址之间都差4个字节

//冒泡排序
//最常用的排序算法,对数组内的元素进行排序
//1.比较相邻的元素,如果第一个比第二个大,就交换他们
//2.对每一对相邻元素左右同样的工作,执行完毕后,找到第一个最大值
//3.重复以上步骤,每次比较次数-1,直到不需要比较
//将数组{4,2,8,0,17,7,1,3,15}进行升序排序
#include<iostream>
using namespace std;
int main()
{int arr[9] = { 4,2,8,0,17,7,1,3,15 };//外层循环次数 = 元素个数-1for (int i = 0; i < 9 - 1; i++){//内层循环个数 = 元素个数 - 当前轮数 - 1for (int j = 0; j < 9-i-1; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for (int i = 0; i < 9; i++){cout << arr[i]<<",";}cout << endl;system("pause");return 0;
}

1.2二维数组

//二维数组:就是在一维数组之上,增加一个维度
//1.数据类型 数组名[行数][列数];
//2.数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
//3.数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
//4.数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4}; 可以通过列数确定行数

//二维数组数组名
//查看二维数组所占内存空间 sizeof(arr)
//获取二维数组首地址
//二维数组行数sizeof(arr)/sizeof(arr[0])
//二维数组列数sizeof(arr[0])/sizeof(arr[0][0])

2.函数

//函数:将一段经常使用的代码封装起来,减少重复代码
// 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能
// 函数的定义
// 1.返回值类型 2.函数名 3.参数列表 4.函数体语句 5.return表达式

int add(int num1, int num2)//num1和num2只是形参,不是实数
{int sum = num1 + num2;return sum;
}

函数的调用:使用定义好的函数

函数值传递:函数调用时实参将数值传入形参(值传递时,如果形参发生,不会改变实参)

函数常见样式
//1.无参无返 2.无参有返 3.有参无返 4.有参有返
无返void 有返(类型)

函数的声明(声明可以有多次,但是定义只能有一次)
//在函数调用之前告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义

函数的分文件编写
//让代码结构更加清晰
//1.创建后缀名为.h的头文件 2.创建后缀名为.cpp的源文件 3.在头文件中写函数的声明
//4.在源文件中写函数的定义 都要写上include"自己所编写的头文件的名称"

3.指针:可以通过指针间接访问内存(指针记录地址)

3.1 指针的定义和使用

//定义指针的语法 数据类型 *指针变量名 int *p;
//让指针记录变量a的地址 p = &a;
//指针前 *代表解引用 *p代表所指地址的内容

3.2 指针所占用空间

//在32位操作系统下,指针是占4个字节空间大小,无论什么数据类型
//在64位操作系统下,指针是占8个字节空间大小,无论什么数据类型

3.3 空指针和野指针

//空指针:指针变量指向内存中编号为0的空间 用来初始化指针变量
// 注意:空指针指向的内存是不可以被访问的
//0~255之间的空间是系统占用的,因此不能被访问
int* p = nullptr;

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

空指针和野指针都不是我们申请的空间,因此不要访问

3.4 const修饰指针

int a = 10;
int b = 10;
const int* p = &a;
常量指针:指针的指向可以改,但是指针指向的值不可以改
int* const p = &a;
指针常量:指针的指向不可以改,但是指针指向的值可以改

3.5指针和数组

指针和数组:利用指针访问数组中的元素arr就是数组首地址

3.6指针和函数

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

//实现两个数字进行交换
//值传递
void swap01(int num1, int num2)
{int temp = num1;num1 = num2;num2 = temp;cout << "a = " << num1 << endl;cout << "b = " << num2 << endl;
}
//地址传递
void swap02(int *p1, int *p2)
{int temp = *p1;*p1 = *p2;*p2 = temp;cout << "a = " << *p1 << endl;cout << "b = " << *p2 << endl;
}
int main()
{int a = 10;int b = 20;swap01(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;swap02(&a, &b);cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}

运行结果:
在这里插入图片描述

3.7练习(指针、数组、函数)

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

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

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

相关文章

综合练习(二)

目录 列出薪金比 SMITH 或 ALLEN 多的所有员工的编号、姓名、部门名称、领导姓名、部门人数&#xff0c;以及所在部门的平均工资、最高和最低工资 补充 spool Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 列出薪金比 SMITH 或 AL…

STM32USART串口数据包

文章目录 前言一、介绍部分数据包两种包装方式&#xff08;分割数据&#xff09;HEX数据包文本数据包 数据包的收发流程数据包的发送数据包的接收固定包长的hex数据包接收可变包长的文本数据包接收 二、实例部分固定包长的hex数据包接收连接线路代码实现 可变包长的文本数据包接…

【InternLM 实战营笔记】基于 InternLM 和 LangChain 搭建你的知识库

准备环境 bash /root/share/install_conda_env_internlm_base.sh InternLM升级PIP # 升级pip python -m pip install --upgrade pippip install modelscope1.9.5 pip install transformers4.35.2 pip install streamlit1.24.0 pip install sentencepiece0.1.99 pip install a…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种&#xff0c;左外和右外连接&#xff0c; 左外&#xff1a;相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外&#xff1a;相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

比特币暴涨逼近历史最高点;阿里云全线降价20%丨 RTE 开发者日报 Vol.155

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

C++的晨曦之旅:开启编程的新篇章

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、 命名空间 在 C/C 中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0…

div在vue的组件之中如何设置这个字体的颜色和样式大小

在Vue组件中设置<div>的字体颜色和样式大小可以通过两种主要方式实现&#xff1a;通过内联样式&#xff08;inline styles&#xff09;或者通过CSS类&#xff08;CSS classes&#xff09;。 使用内联样式 在Vue模板中直接在元素上使用style属性来设置样式。这种方法适用…

Android Shadow插件化框架分析与集成(一)

一、shadow源码导入及分析 1、下载项目源码 2、导入到Android studio 3、设置jdk及sdk版本 包/应用描述类型sample-constant公共字符串常量libsample-host宿主应用applicationsample-host-lib宿主应用依赖包libsample-manager是插件管理器的动态实现,主要负责加载插件和安装…

【Android开发】01-第一个Android APP

一、改MainActivity class MainActivity : AppCompatActivity() {/*因Android的app有生命周期&#xff0c;故入口是OnCreate而不是main函数*/override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main…

071:vue+cesium 实现下雨效果

第071个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中实现下雨效果,这里使用着色器来实现实例特效。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共120行)着色代码实现心得:专栏目标示例效果

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

初阶数据结构:栈与队列的扩展补充

目录 1. 栈与队列练习题1.1 栈的括号匹配问题1.2 用队列来实现栈1.3 用栈来实现队列1.4 扩展&#xff1a;循环队列 1. 栈与队列练习题 1.1 栈的括号匹配问题 题目信息&#xff1a; 题目链接&#xff1a; 括号匹配问题 思路&#xff1a; 利用栈的后进先出特性来实现括号的匹配 …

网络编程day3

1.思维导图 2.TCP机械臂测试 tcpCli.c #include<myhead.h> #define SER_IP "192.168.125.162" //服务器IP #define SER_PORT 7777 //服务器端口#define CLI_IP "192.168.159.144" //客户端IP #define CLI_PORT 9999 //客户端端口号int…

底层自行实现——监督学习算法(1线性回归)

1.1 简单线性回归 1. 简介 简单线性回归&#xff08;SLR - Simple Linear Regression&#xff09;模型可以表示为&#xff1a; Y β 0 β 1 X ϵ Y \beta_0 \beta_1X \epsilon Yβ0​β1​Xϵ Y Y Y&#xff1a;因变量或目标变量。 X X X&#xff1a;自变量或解释变量。…

考取ORACLE数据库OCP的必要性 Oracle数据库

OCP证书是什么&#xff1f; OCP&#xff0c;全称Oracle Certified Professional&#xff0c;是Oracle公司的Oracle数据库DBA&#xff08;Database Administrator&#xff0c;数据库管理员)认证课程。这是Oracle公司针对数据库管理领域设立的一项认证课程&#xff0c;旨在评估和…

网盘拉新项目去哪找平台对接?推荐6个一手渠道接单!

在当今这个充满竞争的时代&#xff0c;网盘项目的寻找与对接成为了许多团队关注的焦点。那么&#xff0c;我们应该如何找到那些既靠谱又有潜力的项目呢&#xff1f;经过深入研究和全网检索&#xff0c;我为大家盘点了6个值得一试的接单渠道&#xff0c;助力网盘推广团队高效寻找…

matlab工具包

matlab安装yalmip和cplex出错 - 知乎 (zhihu.com) Cplex的安装和使用实例-CSDN博客 一条龙教程&#xff1a;Matlab下使用yalmip(工具箱)cplex&#xff08;求解器&#xff09;_使用yalmip和cplex求解器进行建模和求解的步骤如下:-CSDN博客 啊啊啊&#xff0c;好开心&#xff…

Mint_21.3 drawing-area和goocanvas的FB笔记(二)

一、goocanvas安装 Linux mint 21.3 库中带有 libgoocanvas-2.0-dev, 用sudo apt install libgoocanvas-2.0-dev 安装&#xff0c;安装完成后&#xff0c;检查一个 /usr/lib/x86_64-linux-gnu 下是否有libgoocanvas.so的软件链接。如果没有&#xff0c;或是 .so.x 等类似后面…

事务Transaction简写为tx的原因

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Transaction简写的由来 数据库事务Transaction通常被简写为tx。让人疑惑的是&#xff1a;这个单词本身没有字母x为何又将其简写成了tx呢&#xff1f; 第一种可能 Transac…

“平民化”非结构数据处理

在全球信息产业高速发展的背景下&#xff0c;IDC预测&#xff0c;2018 到 2025 年之间&#xff0c;全球产生的数据量将会从 33 ZB 增长到 175 ZB&#xff0c; 复合增长率27%&#xff0c;其中超过 80%的数据都会是处理难度较大的非结构化数据&#xff0c;如文档、文本、图形、图…