数组内容整理

本文介绍了C语言中数组的基本概念,包括一维数组的创建、初始化方法(静态和动态),以及二维数组的语法和操作。还讨论了数组的内存存储结构和变长数组这一C99特性。
摘要由CSDN通过智能技术生成

数组


数组指的是一组相同类型元素的集合,至少得存放一个数据,意味着数组元素个数不能为0;数组可以分为一维数组及多维数组(二维及以上的数组)。

  1. 一维数组
  • 数组的创建
//数组创建的语法形式
type arr_name[常量值];	

数组在创建的同时可以指定数组的大小和数组的元素类型
。数组的类型可以是:char, short, int ,float等,也可以是自定义类型
。arr_name 是数组名,在实际命名时最好见名知意
。[ ] 中的常量值是指定数组大小的,值得注意的是[ ]中的常量值只能是常量及常量表达式

  • 数组的初始化
    数组的初始化可分为静态初始化和动态初始化,其中静态初始化又可分为完全初始化和不完全初始化。
	//完全初始化
	int arr[5] = {1,2,3,4,5};
	
	//不完全初始化
	int arr1[5] = {1}; //所谓的不完全初始化是只初始化其中的部分,剩下的则由编译器默认初始化

	//动态初始化
	int arr2[] = {1,2,3,4,5,6,7};  //动态初始化就是不指定数组的元素个数,而是直接由写入的元素将数组撑起来
  • 数组的类型
    。 数组算是一种自定义类型,将数组名去掉留下的部分就是数组的类型
	int arr1[10];
	char arr2[5];
	

arr1数组的类型就是 int [10]
arr2数组的类型就是 char [5]

  • 数组使用
    。数组下标: C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下标就相当于数组元素的编号(数组下标和数组中元素位序不是一回事)
	int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 

arr数组和下标

在这里插入图片描述
C 语言中使用下标引用操作符来访问数组中的元素

#include <stdio.h>
int main()
{
 	int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 
 	printf("%d\n", arr[7]);//8
 	printf("%d\n", arr[3]);//4
	
	return 0;
}

。数组采用循环遍历的方式输入与输出

#include <stdio.h>
int main()
{
	int arr[10] = {0}; 
 	
 	//输入
 	int i = 0;
 	for(i=0; i<10; i++)
 	{
 		scanf("%d", &arr[i]);
 	}
 	//输出
 	for(i=0; i<10; i++)
 	{
 		printf("%d ", arr[i]);
 	}
 return 0;
}

输入输出结果如下:
在这里插入图片描述

  • 一维数组咋内存中的存放
    数组的内存地址输出打印如下:
    在这里插入图片描述

可以看出数组在内存中是按顺序连续存放的,每个元素之间相差4个字节,这是由元素类型决定的

  • 数组元素个数
    。数组元素个数使用sizeof 关键字计算,sizeof关键字是计算类型或变量在内存中所占大小
    。值得注意的是sizeof后面只跟数组名,则计算的是整个数组的大小

在这里插入图片描述

  1. 二维数组
    二维数组从本质上来说,就是一维数组,只不过它的元素类型是一个一维数组;这也意味着二维数组与一维数组有这相似的操作

在这里插入图片描述

//二维数组的语法形式
type arr_name [常量值1][常量值2];

其中常量值1 表示行,常量值2 表示列;二维数组也就是一个由行列构成的矩阵。

  • 二维数组的创建及初始化
	//创建的同时初始化
	int arr[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
	
	//不完全初始化
	int arr[3][5] = {{1,2},{2,3},{3,4}};

在这里插入图片描述

ps:二维数组在初始化时可以省略行但不可以省略列;也是靠这数组中的元素将其撑起来的

  • 二维数组的使用
    。⼆维数组访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定数组中的⼀个元素。
    。C语⾔规定,⼆维数组的⾏是从0开始的,列也是从0开始的,如下所⽰:
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

(255,255,255)
在这里插入图片描述
。 二维数组使用嵌套循环遍历的方式输入输出

#include <stdio.h>
int main()
{
 	int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
 	int i = 0;//遍历⾏
 	//输⼊
 	for(i=0; i<3; i++) //产⽣⾏号
 	{
 		int j = 0;
 		for(j=0; j<5; j++) //产⽣列号
 		{
 			scanf("%d", &arr[i][j]); //输⼊数据
 		}
 	}
 	//输出
 	for(i=0; i<3; i++) //产⽣⾏号
 	{
 		int j = 0;
 		for(j=0; j<5; j++) //产⽣列号
 		{
 			printf("%d ", arr[i][j]); //输出数据
 		}
 		printf("\n");
 	}
 	return 0;
 }
  • 二维数组在内存中的存储
    在这里插入图片描述
    二维数组和一维数组一样在内存中也是按顺序连续存放的,每个元素之间相差等量大小的字节
    在这里插入图片描述
    二维数组的每个元素都是一个数组,其在内存中的分配如上图所示
  1. 变长数组
    变长数组是C99中给出的数组新特性,它可以允许我们使用变量指定数组的大小,比如:
int n = a + b;
int arr[n];

在使用变长数组时需要注意以下几点:
①数组的长度只有在运行时才能确定,所以变长数组不能被初始化
②变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。
③VS编译器虽然支持大部分C99语法,但不支持变长数组,所以在VS上不能实现变长数组的操作

在这里插入图片描述


在这里插入图片描述

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值