【2.5】数组

本文详细介绍了C语言中的数组,包括一维数组、二维数组的创建与内存布局,强调了数组名作为首元素地址的概念。此外,文章还讲解了冒泡排序算法的实现,并探讨了优化可能性。通过示例代码展示了如何在C语言中进行冒泡排序,以及如何在已排序数组中避免不必要的排序。
摘要由CSDN通过智能技术生成

目录

1.数组

2.二维数组

3. 数组名

3.1 数组传参

3.2 冒泡排序 bubble_sort


1.数组

  • 创建数组[]:里面需要常量 / 常量表达式
  • 数组不完全初始化:剩下的默认元素是 0 
  • 创建字符数组:里面的数字被转化成ASCII码对应的字符
  • 数组在内存中连续存放,且地址由低到高

  • 未指定大小的数组,会根据内容初始化自动分配空间大小,所以sizeof都是确定的

 

分析:

sizeof计算的是所占空间大小,这里应该是6+1( ' \0' )个字节

strlen计算 \0 之前的字符串长度

分析:

这里未完全初始化,且没有给定数组大小。所以自动分配arr的空间是三个字节

所以sizeof的值是3

strlen只计算 \0 之前的字符串个数。这里不知道 \0 什么时候出现,所以是一个随机值

  • strlen 和 sizeof 没有什么关联
  • strlen 是计算字符串长度的,是库函数,返回值是一个无符号整型,需要头文件 string.h
  • sizeof 计算目标所占空间大小,单位字节,是操作符,也是关键字

2.二维数组

  • 二维数组的列不能省略
  • 二维数组的打印,用二层循环遍历实现
  • 二维数组在内存中也是连续存放的,本质中在内存中就是一维数组存放

  • arr[0] 相当于第一行的数组名 

3. 数组名

3.1 数组传参

  • 数组名是数组首元素的地址
  • 数组传参传递的数组,也就是首元素的地址,也就是个指针

 

两个例外:(除了这两个例外,以后看到所有的数组名都是首元素地址

  • sizeof(arr)----->数组名代表整个数组大小
  • &arr-------->取出的是整个数组地址

 

3.2 冒泡排序 bubble_sort

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void bubble_sort(int arr[], int sz)  // 算法实现
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz; i++)
	{
		for (j = i+1; j < sz; j++)
		{
			if (arr[i] > arr[j])
			{
				int tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
	}
}


int main()
{
	int arr[] = { 0,9,2,3,4,1,5,6,7,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	 
	bubble_sort(arr, sz);  // 冒泡排序

	int i = 0;
	int j = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

  • 代码可以在优化,假如已经是有序的数组,不需要再排序
  • 通过 flag 标志位实现

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵星人监护人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值