对数组的认识

目录

1. 一维数组的创建和初始化

1.1 数组的创建

1.2 数组的初始化

1.3 一维数组的使用(访问)

1.4 一维数组在内存中的存储

2. 二维数组的创建和初始化

2.1 二维数组的创建

2.2 二维数组的初始化

2.3 二维数组的使用

2.4 二维数组在内存中的存储

3. 数组越界

4. 数组作为函数参数

4.1 冒泡排序函数

4.2 数组名是什么?



1. 一维数组的创建和初始化

1.1 数组的创建

数组是一组相同类型元素的集合。
数组的创建方式:(语法形式)

type_t  arr_name  [const_n];

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

注意:

数组创建,在C99标准之前, [  ] 中只能是常量,不能使用变量。

在C99标准中支持了变长数组的概念,允许数组的大小是变量,而且要求编译器支持C99标准。

VS2019对C99的支持不好,所以在VS2019中不能使用变长数组概念。

变长数组不能初始化,这是语法要求。

因为用变量来指定大小时,变量是代码运行起来的时候才创建的,在编译器不知道变量(数组大小)具体是多少的时候对数组初始化是没有意义的。

1.2 数组的初始化

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

#include <stdio.h>
int main()
{
    int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化
	int arr1[10] = { 1,2,3 };//不完全初始化,剩余元素默认初始化为0
	int arr2[10] = { 0 };//数组的不完全初始化,第一个元素指定为0,剩余元素默认初始化为0,即全都是0
	int arr3[] = { 1,2,3 };//数组有3个元素,即数组大小是3
	//对数组进行初始化可以不指定数组大小
	//此时数组大小是根据初始化内容确定的
	int arr4[] = { 0 };//数组有1个元素,数组大小是1

	/*int arr[] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}*/
	//错误示范:越界访问

	return 0;
}

数组在创建的时候如果想不指定数组的确定的大小就需要初始化;

数组的元素个数根据初始化的内容来确定。

但是对于下面的代码要区分,内存中如何分配:

char arr1[] = "abc";
char arr2[3] = {'a','b','c'};

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[3] = { 'a',98,'c' };//98是字符a的ASCII值,相当于放的也是字符b
	

	char arr2[] = { 'a','b','c' };//数组有3个元素,数组大小是3(3个字节),因为每个元素是一个字符,一个字符是一个字节
	printf("%d\n", sizeof(arr2));//3,打印的是数组空间的大小用的是sizeof()函数
	//打印字符串长度,用strlen()函数
	printf("%d\n", strlen(arr2));//不遇到'\0'不停,所以长度是随机值


	char arr3[] = "abc";
	printf("%d\n", sizeof(arr3));//4
	//字符串是可以初始化字符数组的
	//数组有4个元素,数组大小是4(4个字节)
	printf("%d\n", strlen(arr3));//3,字符串长度是3

	return 0;
}

strlen()函数是一个库函数

计算的是字符串长度,并且只能针对字符串例如不能求整型数组的长度。

关注的是字符串中是否有'\0',计算的是'\0'之前的字符个数

sizeof是一个操作符(运算符),像加、减、乘、除一样;

sizeof是用来计算变量所占内存空间大小的,任何类型都可以使用,不仅仅限于字符串。

只关注空间大小,不在乎内存中是否存在'\0'。

数组可以不初始化,但里面放的是随机值,随机值的内容是不可控的,像变量、数组这样的在创建的时候要对其初始化,做到对内容可控,这是好的代码书写习惯。

#include <stdio.h>
int main()
{
	int arr[10];//内容是随机值,不报错但有警告:“arr”: 未引用的局部变量

	//int a;//a里放的也是随机值
	//printf("%d\n", a);//报错:使用了未初始化的局部变量“a”
	return 0;
}

1.3 一维数组的使用(访问)

操作符: [ ] ,下标引用操作符。它其实就是用来访问数组元素的操作符。

下标是用来访问元素的。

当访问数组某一个元素时,某一个元素的下标可以是变量,例如arr[i]。

指定(创建)数组空间大小时候必须是常量。

数组的访问——>使用[  ]即可。

1、打印数组元素(输出)

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\n", arr[5]);//6
	//[]是下标访问操作符

	//若打印整个数组:
	int i = 0;
	//计算数组元素个数:
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);//arr[i]就是数组某一个元素
		//1 2 3 4 5 6 7 8 9 10
	}
	return 0;
}

2、若输入元素再访问:(输入)

//若放入一些值(元素)到数组中再打印
#include <stdio.h>
int main()
{
	int arr[10] = { 0 };

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

即可以输入也可以输出。对数组元素可以往进放也可以向外取。输入是可以重置数组的,若想把它改掉可以重新输入一下。

总结:

  • 1. 数组是使用下标来访问的,下标是从0开始。
  • 2. 数组的大小可以通过计算得到。

1.4 一维数组在内存中的存储

 一个整型元素(int)的大小是4个字节。

在内存中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值