C语言:数组

本文详细介绍了数组,特别是针对一维和二维数组的创建、初始化和内存存储方式。讲解了如何通过常量表达式指定数组大小,以及如何进行不完全初始化。还探讨了数组在内存中以连续地址空间存储的特性,并展示了如何使用下标引用操作符访问数组元素。此外,还讨论了数组作为函数参数的情况,并提供了一个冒泡排序的示例,展示了数组在排序算法中的应用。
摘要由CSDN通过智能技术生成

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

一维数组的创建和初始化:

创建:


type_t arr_name[const_n];


//type_t 是数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小,不能使用变量

初始化:

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

int arr[5]={1,2,3,4,5};


int arr[5]={1,2,3};    //不完全初始化,剩下的默认初始化为0


char arr[5]={'a','b','c','d','e'};


char arr[5]="ab";   // a,b,\0,0,0


char arr[]="abcde";

数组在创建的时候如果想不给数组确定的大小就得初始化,数组的元素个数根据初始化的内容来确定,但是对于下面代码要区分,内存中如何分配

  • char arr1[]=”abc“;      (sizeof=4,strlen=3)
  • char arr2[]={'a','b','c'};      (sizeof=3,strlen=随机值(不知道后面有没有数据,\0表示结束))

一维数组的使用:下标引用操作符 [ 0,1,2,3..........]

数组长度:

  • strlen(arr)      //长度确定
  • sizeof(arr)/sizeof(arr[0])      //长度不确定

一维数组在内存中的存储:连续的地址空间

二维数组的创建和初始化

创建:

type_t arr_name[m][n];

//m行n列数组,二维数组的列n不能省略

初始化

int arr[3][4]={{1,2,3,4},{},{},{}};

//不完全触发,补零

二维数组在内存中的存储:连续的地址空间

数组作为函数参数:实际上传过去的是数组首元素的地址

冒泡排序:相邻两个比较,交换

n个数,走n-1趟

void bubble_sort(int* arr,int size)
{
	//确定冒泡排序趟数
	int i=0;
	for(i=0;i<size-1;i++)
	{
		int flag = 1;//假设这一趟要排序的数据已经有序
		//每一趟冒泡排序
		int j = 0;
		for (j=0;j<size-1-i;j++)
		{
			if (arr[j]>arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				flag = 0;//本躺其实不完全有序
			}
		}
		if (flag == 1)
		{
			break;
		}
	}
}

数组名是首元素地址

(有两个例外):

  • sizeof(数组名)——数组名表示整个数组——计算的是整个数组的大小(字节)
  • &数组名——数组名表示整个数组——取出的是整个数组的地址(虽然输出的值和首地址一样,但所表示的含义不同,arr+1表示的第二个元素的地址,&arr+1表示的是这个数组的下一个地址)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值