C初阶(10)---数组

本文介绍了C语言中数组的基本概念,包括一维数组和二维数组的创建、初始化、内存布局以及数组越界的问题。文章还详细讲解了如何通过下标访问数组元素,并提供了数组作为函数参数的例子。此外,还给出了冒泡排序算法的实现,用于对整型数组进行升序排列。
摘要由CSDN通过智能技术生成

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

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

创建方法:数组元素类型   数组名 [数组大小];

int n = 10;
int arr[n];
//C99中引入了变长数组的概念,允许数组的大小用变量来指定
//如果编译器不支持c99中的变长数组,那就不能使用,vs2019不支持

初始化:创建数组的同时赋值,有两种方式①、不完全初始化,定义一部分元素后,余下的元素默认为0;②、完全初始化,不可初始化赋值过多

char arr[]={'a','b'};

初始化时,数组大小可以省略,会根据 初始化内容指定大小。

使用:[ ]下标引用操作符,数组的下标从0开始,数组名和数组大小是[ ] 的操作数。

sizeof(arr);//数组总长
sizeof(arr[0]);//单个元素的长
int sz=sizeof(arr)/sizeof(arr[0]);//求元素个数

例题:给数组赋值1~100并打印到屏幕上。

#include<stdio.h>
int main()
{
	int arr[100] = { 1,2,3,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0;i < sz; i++)
	{
		arr[i] = i + 1;
	}
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

一维数组在内存中是连续存放的,随着数组下标的增长,地址是由高到低变化的。

%p用于打印地址(16进制),%d打印整数(10进制)

二、二维数组

创建:数据类型 数组名[ 行数 ] [ 列数 ];

初始化和行列的省略

int arr[3][5]={1,2,3,4,5};//列数不可以省略,
//一行填满后,继续下一行,余下位置为0,可自动找寻行数。
int arr1[][5]={{1,2},{3,4},{5,6}};//行数可以省略,列数不可以省略。

二维数组的访问也是通过[ ]下标引用操作符访问的。

例题:在屏幕上打印一个二维数组。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int arr[3][5] = { {1,2},{3,4},{5,6} };
	int i ,j= 0;
	for (i = 0; i < 3; i++)//3=sizeof(arr)/sizeof(arr[0])即整个数组大小除以第一行的大小
	{
		for (j = 0; j < 5; j++)//5=sizeof(arr[0])/sizeof(arr[0][0])
//即第一行大小除以第一行第一个元素的大小
		{
			arr[i][j];
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

二维数组在内存中也是连续存放的,初始化时行可省略,列不可省略。

三、数组越界

数组下标从0开始,如果有n个元素,最后一个元素的下标就是n-1。如果数组下标小于0或大于n-1,即就是数组越界。越界编译器并不会报错,但会访问到别的地址空间上。

四、数组作为函数参数

冒泡排序思想:数组中两个相邻的元素进行比较,如果不满足顺序,就交换。一个先于其他元素比较,找到正确位置后,下一个再与其他元素比较。10个数据元素排9趟。

例题:写一个冒泡排序的函数,来排序arr数组的内容,升序。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
	//趟数
	int i = 0;
	for (i = 0; i < sz-1; i++)
	{
		//每趟冒泡排序的过程
		for (int j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j + 1] = temp;
			}
		}
	}
}

int main()
{
	int arr[] = { 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;
}

注意:数组名就是数组首元素的地址,但有两个例外:

1>sizeof(数组名),数组名不是首元素的地址,数组名表示整个数组,计算的是整个数组的大小。

2> &数组名,数组名不是首元素的地址,数组名表示整个数组,取出的是整个数组的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值