十二、数组

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.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

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

表示的这一行的地址

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

行列计算

相关推荐

  1. C++系列:C++指针数组

    2024-07-13 01:52:02       52 阅读
  2. 每天一个数据分析题(

    2024-07-13 01:52:02       42 阅读
  3. 每天一个数据分析题(七)

    2024-07-13 01:52:02       38 阅读
  4. 每天一个数据分析题(百六

    2024-07-13 01:52:02       39 阅读
  5. 每天一个数据分析题(百八

    2024-07-13 01:52:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 01:52:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 01:52:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 01:52:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 01:52:02       69 阅读

热门阅读

  1. 【qml学习笔记】在qml中连接信号与槽

    2024-07-13 01:52:02       22 阅读
  2. 【第20章】MyBatis-Plus逻辑删除支持

    2024-07-13 01:52:02       13 阅读
  3. AI agents 印象

    2024-07-13 01:52:02       18 阅读
  4. Kafka 面试题精选

    2024-07-13 01:52:02       23 阅读
  5. gpt讲 Observable 对象

    2024-07-13 01:52:02       21 阅读
  6. SSH协议

    SSH协议

    2024-07-13 01:52:02      18 阅读
  7. 【Spring Boot】spring boot主启动类_内置服务

    2024-07-13 01:52:02       22 阅读
  8. qt 折线图

    2024-07-13 01:52:02       22 阅读
  9. 【Linux】02.shell命令及其运行原理

    2024-07-13 01:52:02       23 阅读
  10. RAG的上限在哪里?边界在哪里?

    2024-07-13 01:52:02       21 阅读
  11. 我的大事记

    2024-07-13 01:52:02       20 阅读
  12. 每天一个数据分析题(四百二十八)- 方差分析

    2024-07-13 01:52:02       24 阅读