十二、数组

news/2024/10/7 1:03:24 标签: c语言, c++, 开发语言, 算法

1. 一维数组的创建和初始化

数组是一组相同类型元素的集合。

变长数组是不能初始化的。

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

例如上图

char ch3[ ]="abc";里面方的就是 a b c \0

char ch3[ ]="abc";里面方的就是 a b c \0

对于数组的使用我们之前介绍了一个操作符:[ ],下标引用操作符。它其实就数组访问的操作符。

总结:

  1. 数组是使用下标来访问的,下标是从0开始。
  2. 数组的大小可以通过计算得到

一维数组在内存中的存储

地址和地址之间差四个字节,因为一个整形占4个字节。

随着数组下标的增长,元素的地址,也在有规律的递增。

由此可以得出结论:数组在内存中是连续存放的。

2. 二维数组的创建和初始化

二维数组可以省略行,不能省略列。

二维数组在内存中也是连续存储的。

3. 数组越界

数组的下标是有范围限制的。

数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。

所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的, 所以程序员写代码时,最好自己做越界的检查。

越界之后打印的是随机数。

4. 数组作为函数参数

往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法 思想)函数。将一个整形数组排序。

冒泡排序的核心思想:两个相邻的元素进行比较。

一趟冒泡排序让一个数据来到它最终应该出现的位置上!

10个元素需要9次。

n个元素需要n-1次冒泡排序。

数组名本质上是:数组首元素的地址

//数组传参的时候,形参有2种写法:
//1.数组
//2.指针

//形参是数组的形式
void bubble_sort(int arr[],int sz)
{
	
	
	int i = 0;
	for ( i = 0; i < sz-1; i++)
	{
		//一次冒泡排序
		int j = 0;
		for ( j = 0; j < sz-1-i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				//交换
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}

		}
	}


}

int main()
{
	//把数组的数据排列成升序
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };//降序
	int sz = sizeof(arr) / sizeof(arr[0]);
	//冒泡排序的算法,对数组进行排序
	bubble_sort(arr,sz);
	int i = 0;
	for ( i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);

	}
	return 0;
}
//形参是指针的形式
void bubble_sort(int* arr,int sz)
{
	
	
	int i = 0;
	for ( i = 0; i < sz-1; i++)
	{
		//一次冒泡排序
		int j = 0;
		for ( j = 0; j < sz-1-i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				//交换
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}

		}
	}


}

int main()
{
	//把数组的数据排列成升序
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };//降序
	int sz = sizeof(arr) / sizeof(arr[0]);
	//冒泡排序的算法,对数组进行排序
	bubble_sort(arr,sz);
	int i = 0;
	for ( i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);

	}
	return 0;
}

5.数组名是什么?

数组名确实能表示首元素的地址。

但是又两个例外:

1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

二维数组的数组名也表示首元素的地址。

表示的这一行的地址

中间隔了十六个字节,也就是四个数值。

行列计算


http://www.niftyadmin.cn/n/5545063.html

相关文章

自定义激活函数:Mojo模型的动态选择之道

自定义激活函数&#xff1a;Mojo模型的动态选择之道 在深度学习领域&#xff0c;激活函数是神经网络中不可或缺的组成部分&#xff0c;它为模型引入了非线性&#xff0c;使得网络能够学习和模拟复杂的函数映射。Mojo模型&#xff0c;作为H2O.ai提供的一种模型部署格式&#xf…

three-tile 一个开源的轻量级三维瓦片库

three-tile 介绍 three-tile 是一个开源的轻量级三维瓦片库&#xff0c;它基于threejs使用typescript开发&#xff0c;提供一个三维地形模型&#xff0c;能轻松给你的应用增加三维瓦片地图。 源码&#xff1a;https://github.com/sxguojf/three-tile 示例&#xff1a;https:/…

探索Mojo模型:解锁机器学习模型的可解释性之旅

探索Mojo模型&#xff1a;解锁机器学习模型的可解释性之旅 在人工智能和机器学习领域&#xff0c;模型的可解释性是一个至关重要的议题。随着模型变得越来越复杂&#xff0c;理解模型的决策过程成为了一个挑战。Mojo模型作为一种模型序列化格式&#xff0c;提供了一种方法来部…

解析Java中的动态代理与静态代理的区别

解析Java中的动态代理与静态代理的区别 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 代理模式是软件开发中常用的一种设计模式&#xff0c;用于控制对其它对象的访问。在Java中&#xf…

经常用借呗和花呗对征信有影响吗?

说起支付宝里的花呗和借呗&#xff0c;大伙儿肯定都不陌生&#xff0c;它们俩就像是支付宝里的信用贷款双胞胎&#xff0c;名字相近&#xff0c;性格却大相径庭。现在&#xff0c;这俩兄弟都乖乖地接入了央行的征信大家庭&#xff0c;你的每一次使用&#xff0c;都会被记录得清…

[氮化镓]Kevin J. Chen组新作—肖特基p-GaN HEMTs正栅ESD机理研究

这篇文章是发表在《IEEE Electron Device Letters》上的一篇关于Schottky型p-GaN栅极高电子迁移率晶体管&#xff08;HEMTs&#xff09;的正向栅极静电放电&#xff08;ESD&#xff09;机理研究的论文。文章由Jiahui Sun等人撰写&#xff0c;使用了基于碳化硅&#xff08;SiC&a…

每天一个数据分析题(四百十四)- 线性回归模型

线性回归模型yabxe,中的e是 A. 因变量 B. 自变量 C. 误差项 D. 回归系数 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#xff0c;SQL&#xff0c;统计学&#xff0c;数据分析理论&#xf…

ArcGIS实战—等高线绘制

今天分享一个使用ArcGIS Pro制作等高线地图的教程&#xff0c;等高线是用来表达地形最常见的形式之一。那么如何制作一个效果比较好的等高线地形图呢&#xff1f;让我们开始今天的教程。 1 DEM数据 第一步&#xff1a;获取DEM地形数据&#xff0c;网址&#xff08;https://dwt…