【C语言-数组】看了《黑客与画家》(虽然没什么关联...

想理解数组,也得对内存有一定理解

内存:储存器

了解几点:

  1. 编程的本质就是操控数据,而数据存放在内存中
  2. 为了更好利用内存,我们将内存分成了一个个内存单元
  3. 每个单元有自己的编号(地址/指针)

请添加图片描述


数组:一组同类型元素的集合, 也是一块连续的内存空间

请添加图片描述
int 类型的变量,每个占4个字节,可知:连续存放

1.创建&初始化&使用

  1. 创建
  • type_t (数据类型) arr_name(数组名) [const_n] (元素个数)
  • int arr [10];
  1. 初始化
  • int arr [3] = {1,2,3};
  • int arr[ ] = {1,2,3};//元素个数可省
  • int arr [10] = {1,2,3 (0,0,0,0,0,0,0) };//不完全初始化,剩下的元素默认初始化为0
  1. 使用
  • “ [ ] ” : 下标引用操作符

要注意的:

  • 数组的下标从 0 开始
  • 下标限制范围: 0 —— n-1(<0 || >n-1 就是越界访问)

2.遍历

用循环的方式将每个元素遍历出来:见上“连续存放

3.数组作为函数参数

数组名的本质:数组首元素地址(两个例外)

  1. sizeof(数组名) —— 数组名这时表示整个数组,计算的是整个数组的大小
  2. &数组名 —— 数组名这时表示整个数组,取出的是整个数组的地址
  • 数组作实参时,形式为“arr”;数组做形参时,形式为“arr[ ]”
  • 传参时,形参有两种写法:1.数组 2.指针
//指针
//void bubble_sort(int* p_arr,int sz)
//数组
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[10] = { 9,8,7,6,5,4,3,2,1 };
	//如果数组没有给定元素数量,可以如下计算
	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;
}

4.字符串&数组

C语言中没法直接定义字符串数据类型,但可以用数组定义

  • char str [ ] = “peigen”;
  • char str [ ] = {‘p’,‘e’,‘i’,‘g’,‘e’,‘n’,(‘\0’)}

注意:

  • 字符串的结束标志是’\0’,所以用第二种方法是要跟’\0’
  • printf(“%s”,str);(打印字符串传一个地址过去)

5. \0 的“是非多”

  • sizeof(arr) —— 计算数组内所有元素的大小(包括’\0’
  • srelen(arr) —— 计算字符串长度(到’\0’为止,不算’\0’

6.多维数组

数组在内存中连续存放,我们就能把二维数组甚至n维数组看成一维数组,或者说,二维数组是元素为一维数组的数组,每个元素都是指向一维数组的指针。
请添加图片描述

  • n维数组需要给定后n-1个方括号内的参数,剩下一个编译器可以帮我们计算
  • 如int arr [ ] [4] = {1,2,3,4,7,8,9,0} ——2行4列

今天的分享就到这里,不足之处望请斧正


这里是培根的blog,一起进步!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

周杰偷奶茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值