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

news2024/11/16 4:53:06

文章目录

  • 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 };
	//外层循环次数 = 元素个数-1
	for (int i = 0; i < 9 - 1; i++)
	{
		//内层循环个数 = 元素个数 - 当前轮数 - 1
		for (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.coloradmin.cn/o/1480953.html

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

相关文章

【Java设计模式】三、

文章目录 0、案例&#xff1a;咖啡屋1、简单工厂模式 静态工厂&#xff08;不属于23种之列&#xff09;2、工厂方法模式3、抽象工厂模式4、建造者模式5、原型设计模式 0、案例&#xff1a;咖啡屋 模拟咖啡店点餐。咖啡有多种&#xff0c;抽象类&#xff0c;子类为各种咖啡。咖…

第四个程序:(a+b)^2+a/c-c^2

&#xff08;ab&#xff09;^2a/c-c^2运算出结果 步骤&#xff1a; 第一步&#xff1a; 建立项目; 第二步&#xff1a;添加部件&#xff0c;连线&#xff0c;完成程序 第三步&#xff1a;运行得出结果 视频&#xff1a; (ab)^2ac-c^2

软考-计算题

1.二维矩阵转换成一维矩阵 2.算术表达式&#xff1a; 3.计算完成项目的最少时间&#xff1a;之前和的max&#xff08;必须之前的所有环节都完成&#xff09; 松弛时间&#xff1a;最晚开始时间-最早开始时间 最早&#xff1a;之前环节都完成的和的max 最晚&#xff1a;总时间…

2024年经典【自动化面试题】附答案

一、请描述一下自动化测试流程&#xff1f; 自动化测试流程一般可以分为以下七步&#xff1a; 编写自动化测试计划&#xff1b; 设计自动化测试用例&#xff1b; 编写自动化测试框架和脚本&#xff1b; 调试并维护脚本&#xff1b; 无人值守测试&#xff1b; 后期脚本维…

java009 - Java面向对象基础

1、类和对象 1.1 什么是对象 万物皆对象&#xff0c;客观存在的事物皆为对象。 1.2 什么是面向对象 1.3 什么是类 类是对现实生活中一类具有共同属性和行为的事物抽象。 特点&#xff1a; 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属…

装饰器模式 详解 设计模式

装饰器模式 它允许你在不改变对象结构的情况下&#xff0c;动态地将新功能附加到对象上。 结构&#xff1a; 抽象组件&#xff08;Component&#xff09;&#xff1a;定义了原始对象和装饰器对象的公共接口或抽象类&#xff0c;可以是具体组件类的父类或接口。具体组件&…

【c++】stack和queue模拟实现

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕stack和queue模拟 > 毒鸡汤&#xff1a;…

Spring Cloud 构建面向企业的大型分布式微服务快速开发框架+技术栈介绍

分布式架构图 Cloud架构清单 Commonservice&#xff08;通用服务&#xff09; 1&#xff09;清单列表 2&#xff09;代码结构 Component&#xff08;通用组件&#xff09; 1&#xff09;清单列表 2&#xff09;代码结构 快速开发管理平台——云架构【系统管理平台】 一…

深度学习-回顾经典AlexNet网络:山高我为峰

深度学习-回顾经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰&#x…

MySQL:合并查询语句

1、查询表的数据 t_book表数据 SELECT * FROM db_book.t_book; t_booktype表数据 SELECT * FROM db_book.t_booktype; 提醒&#xff1a; 下面的查询操作的数据来自上图查询表的数据 2. 使用 UNION 查询结果合并&#xff0c;会去掉重复的数据 使用UNION关键字是&#xff0c;数…

linux_day04

大纲&#xff1a;命令&#xff0c;vim&#xff0c;gcc&#xff0c;编译工具&#xff0c;生成代码&#xff0c;调试&#xff0c;库makefile&#xff0c;系统编程 文件系统&#xff1a;文件属性&#xff0c;文件内容&#xff0c;万物皆文件&#xff08;不在内存中的是文件&#…

新书速览|Python数据科学应用从入门到精通

系统教授数据科学与Python实战&#xff0c;涵盖线性回归、逻辑回归、决策树、随机森林、神经网 本书内容 随着数据存储、数据处理等大数据技术的快速发展&#xff0c;数据科学在各行各业得到广泛的应用。数据清洗、特征工程、数据可视化、数据挖掘与建模等已成为高校师生和职场…

Python学习 问题汇总(None)

None的总结 在Python中&#xff0c;对于一些变量往往需要赋初始值&#xff0c;为了防止初始值与正常值混淆&#xff0c;通常采用置0或置空操作&#xff0c;置0比较简单&#xff0c;置空则是赋NoneNone是一个空值&#xff0c;可以赋给任意类型的变量&#xff0c;起到占位的作用…

【Godot4自学手册】第十七节主人公的攻击和敌人的受伤

本节主要学习主人公是如何向敌人发起进攻的&#xff0c;敌人是如何受伤的&#xff0c;受伤时候动画显示&#xff0c;击退效果等。其原理和上一节内容相同&#xff0c;不过有许多细节需要关注和完善。 一、修改Bug 在本节学习之前&#xff0c;我将要对上一节的代码进行完善&am…

基础小白快速入门Python------>模块的作用和意义

模块&#xff0c; 这个词听起来是如此的高大威猛&#xff0c;以至于萌新小白见了瑟瑟发抖&#xff0c;本草履虫见了都直摇头&#xff0c;好像听上去很难的样子&#xff0c;但是但是&#xff0c;年轻人&#xff0c;请听本少年细细讲述&#xff0c;他只是看起来很难&#xff0c;实…

MySql安全加固:可信IP地址访问控制 设置密码复杂度

MySql安全加固&#xff1a;可信IP地址访问控制 & 设置密码复杂度 1.1 可信IP地址访问控制1.2 设置密码复杂度 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1.1 可信IP地址访问控制 当您在创建用户时使用’%作为主机部分&#xff0c;…

【爬虫逆向实战 逆向滑块 Python+Node】今天逆向的网站有点嘿嘿,还是仅供学习,别瞎搞

逆向日期&#xff1a;2024.03.01 使用工具&#xff1a;Node.js、Python 加密方法&#xff1a;AES标准算法 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实&#xff0c;它只是根据上文&#xff0c;猜下一个词&#xff08;的概率&#xff09;…… OpenAI 的接口名就叫【completion】&#xff0c;也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

Appium移动端自动化测试-(Java)

目录 环境搭建ADB调试工具adb构成adb工作原理adb常用命令电脑连接多个设备跟模拟器使用adb包名与界面名的概念如何获取包名和界面名文件传输获取app启动时间获取手机日志其他命令 Appium全自动化测试框架&#xff08;python&#xff09;冲错了序言 环境搭建Appium客户端安装App…

IDEA切换 Springboot初始化 URL

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…