C语言数组基本知识

数组就是指一群元素的集合

1.一维数组

一种相同类型元素的集合称为数组,如字符数组,整形数组等

(1)一维数组的创建:

创建方式:

type_t arr_name [const_n];
//type_t 数组元素类型,数组类型(type)
//arr_name 数组名称(name)
//const_n 常量(const) n 数组的长度,大小

例如:int arr[10];这就创建了一个10个元素类型为整形的,名称为的arr数组;

//正确创建:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组长度给定
int arr[] = {1,2,3,4,5};//数组长度不定,由括号内元素个数决定
//错误创建:
int n = 10;
int arr[n];//创建一个变量,用变量作为数组长度大小
//在C99标准之前,这种创建方式是错误的,数组长度只能给定常量
//在C99标准之后,这种创建方式才被引入,同时这种数组被称为变长数组
//注意:在VS编译器下不支持这种创建方式,在gcc编译器下支持

括号内5个元素对应数组长度为5

(2)一维数组的初始化:

A.整形一维数组:

//按照元素个数赋值情况分:完全初始化和不完全初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
int arr[10] = {1,2,3};//不完全初始化,里面赋值个数字但不全赋值,剩余的空间都被赋值为0

可见整形一维数组初始化方式分为完全初始化和不完全初始化,不完全初始化所剩下的空间默认赋值为0。

B.字符一维数组:

字符数组的两种存储方式:

//存储字符串
char arr[4]="abcd";
//存储字符
char arr[4]={'a','b','c','d'};

同时初始化方式按照分为完全初始化和不完全初始化,不完全初始化所剩下的空间默认赋值为"\0"。

(3)一维数组在内存中的存储方式:

可见,同一行中地址是连续的,递增的,相邻差4个字节(相差一个int,相差大小由数组类型决定,int类型就是4个字节)。

2.二维数组:

多行多列的相同类型的一类元素

(1)二维数组的创建:

创建方式:

type_t arr_name[const_n][const_m];
//type_t 数组元素类型,数组类型(type)
//arr_name 数组名称(name)
//const_n 常量(const) n 数组行的长度,大小
//const_m 常量(const) m 数组列的长度,大小
//数组的总长度,大小:n*m

在创建二维数组的时候:行的长度可以省略,但是列的长度不可以省略

int arr[][4]={1,2,3,4,5};//这个数组4列,1234填充完第一列行后接着填充下一行。

int arr[5][]={1,2,3,4,5,6,7};//这个数组不知道有多少列,也就意味着一行不知道有多少个元素,那么一行就可以填充无数元素,就构不成二维数组。

(2)二维数组的初始化:

下面以整型数组为例子:

//按照元素赋值个数情况分:完全初始化和不完全初始化
int arr[2][3] = {1,2,3,4,5,6};//完全初始化
int arr[2][3] = {1,2,3};//不完全初始化,剩余的赋值为0

//按照赋值方式分:纯大括号和大括号里加大括号
int arr[2][3] = {1,2,3,4,5,6};//纯大括号,数值填完一行继续填充下一行
int arr[2][3] = {{1,2,3},{4,5,6}};//里面第一个大括号表示第一行的数,第二个表示第二行的数
//类似的,在大括号的里面可以不完全初始化,在大括号的大括号里面也可以不完全初始化,如下:
int arr[3][3] = {{1,2,3},{2,3}};

(3)二维数组在内存中的存储方式:

abf8e87740134b0585d3ca96b25ad49c.png

可见,同一行中地址是连续的,递增的,相邻差4个字节,而且下一行的地址和上一行的地址也是连续的,也差4个字节。

此外,其实可以将每一行数组看成一个数组,就如int arr[3][3];,我们把arr[0],arr[1],arr[2]看一个数组,就会得到结果arr[0][0]是指数组arr[0]中的第一个元素,同理arr[0][1]就是arr[0]这个数组中的第二个元素。

3.变长数组

变长数组的创建如下

int n = 10;
int arr[n];//允许数组长度可以为变量

然而,这种创建方式在C99标准之前,是错误的,数组长度只能是常量,宏定义#define定义一个常量创建数组,是可行,后在C99标准中在支持这种数组长度用变量创建的方式,方便了我们使用变量得到自己所需长度的数组

值得注意的是,变长数组不能被初始化,如果初始化了,那么在编译的阶段就会确定数组的大小,而数组的大小是在程序运行时确定,所以不允许初始化;因为变长数组空间大小可变的,当放入指定数量的元素时,就限定死了大小不能小于赋值的数量,就破坏了变长数组的特性。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值