C语言初阶-数组

本文详细介绍了C语言中一维和二维数组的创建、初始化、使用和内存存储。讨论了数组越界的问题,并探讨了数组作为函数参数时的注意事项,特别是冒泡排序函数的设计和数组长度的计算。还深入解析了数组名的本质,包括sizeof运算符和取地址运算符(&)在数组名上的应用。
摘要由CSDN通过智能技术生成

目录

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

1.数组的创建

2.数组的初始化

不完全初始化:

不初始化:

3.一维数组的使用

4.一维数组在内存中的存储

通过指针访问数组元素:

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

1.二维数组的创建

2.二维数组的初始化

​编辑

3.二维数组的使用

4.二维数组在内存中的存储

三、数组越界

四、数组作为函数参数

1.冒泡排序函数的错误设计

2.数组名是什么?

1.  sizeof(数组名)

2.  &数组名

3.冒泡排序函数的正确设计


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

1.数组的创建

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

数组的创建:

type_t      arr_name    [const_n];

 / / type_t  是指数组的元素类型

 / / const_n 是一个常量表达式,用来指定数组的大小

举例:

    int arr1[10];
	char arr2[10];
	float arr3[1];
	double arr4[20];

其中,int,char,float,double就是数组的元素类型,10,10,1,20分别是数组的大小。

下面是一个错误示例

int main()
{
	int n = 0;
	int arr[n] = { 0 };
	return 0;
}

运行时编译器会报错:

这个原因其实前面也讲过:有些编译器在定义数组时,数组的大小必须是一个常量表达式,而上述代码中的n是变量。

注意:C99中引入了变长数组的概念,允许数组的大小用变量来指定,如果编译器不支持C99中的变长数组,那就不能使用,相反,支持C99的编译器可以使用变量来指定数组的大小

2.数组的初始化

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

数组的初始化:

    int arr1[10] = { 1,2,3 };
	int arr2[] = { 1,2,3,4 };
	int arr3[5] = { 1,2,3,4,5 };
	char arr4[3] = { 'a',98,'c' };
	char arr5[] = { 'a','b','c' };
	char arr6[] = "abcdef";

不完全初始化:

int main()
{
	int arr1[10] = { 1,2,3 };
	return 0;
}

  像这种,定义的数组大小是10,而大括号内的元素数只有3个,这就叫做不完全初始化,系统会默认后面7个元素为0。打开监视页面可以看到:

注意: 初始化的元素数可以小于定义数组的大小,但是一定不能超过数组的大小。

我们在定义数组时,也可以不写数组的大小:

    int arr1[10] = { 1,2,3 };

	int arr2[] = { 1,2,3 };

这时系统会根据初始化数组中元素的个数自动确定数组的大小,运行并打开监视页面:

 在初始化字符数组时,以下两种写法的结果是一样的:

    char arr4[] = { 'a',98,'c' };
	char arr5[] = { 'a','b','c' };

因为字符b的ASCII值就是98。

不初始化:

对局部变量不进行初始化,会生成随机值,而对全局变量不进行初始化系统会默认值为0。

局部变量:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int arr1[10];//局部变量
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

代码中数组arr1没有初始化,运行结果为:

全局变量:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int arr1[10];//全局变量
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

 运行结果:

 全局变量和局部变量不初始化的结果不同,本质原因是:存储的区域不同,存储在栈区的不初始化就是随机值,存储在静态区的不初始化就是0。

3.一维数组的使用

前面讲过,数组的下标是从0开始的,数组元素可以通过下标来访问:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	       //下标: 0 1 2 3 4 
	printf("%d\n", arr[4]);//打印下标为4的数组元素
	return 0;
}

运行结果是:5。下标为4的数组元素arr[4]是5。其中,[ ]是下标引用操作符,arr和4是[ ]的两个操作数

当定义数组的大小比较大时,我们不用一个一个输入去赋值,可以通过写代码的方式对其赋值:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int arr[10] = { 0 };//数组的不完全初始化
	//计算数组的元素的个数
	int sz = sizeof(arr) / sizeof(arr[0]);
	//对数组内容赋值
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		arr[i] = i + 1;
	}
	//打印出数组
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

成屿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值