C语言中的数组

一、数组

1.什么是数组

通俗的说,数组就是一个容器,它可以存放其他类型的多个数据。

其特点有:

  • 一个数组中所有元素数据类型相同;
  • 一旦创建,大小就不能被改变;
  • 一个数组里的各个元素在内存中都是顺序紧密排列的;

2.如何定义数组

(1)定义格式

	类型 变量名 [元素数];

(2)例子

	int a[5];

这行代码定义一个可以存储int类型数据的数组,数组名叫a,里面有5个单元,每个单元存储一个int型数据,每个单元存储一个元素。元素名分别叫做:

                           a[0],a[1],a[2],a[3],a[4]

这个数组的第一个元素是a[0],最后一个是a[4],没有a[5]。

因此,如果定义一个可以存储n个数据的数组b,那么数组b里的元素是n个,但是数组里面的元素是从b[0]开始,到b[n-1],没有b[n];

(3)注意

特别强调的是,数组一旦创建,大小就是你定义时的大小,之后就改变不了了。

3.初始化数组

(1)第一种方式

最常规的,定义的时候没有初始化,而是到后面在给每个数组元素赋值。如下:

#include <stdio.h>

int main()
{
	int a[5];
	
	a[0] = 1;
	a[1] = 2;
	a[2] = 3;
	a[3] = 4;
	a[4] = 5;

	printf("%d %d %d %d %d",a[0],a[1],a[2],a[3],a[4],a[5]);
	return 0;
}

输出结果:1 2 3 4 5

(2)第二种方式

集成初始化,直接用大括号给出数组所有元素的值,大括号中的每个元素用逗号分隔。不需要给出数组的大小,编译器帮你数。如下:

int a[] = {1,2,3,4,5};

上面代码就是默认按索引顺序赋值,即把1赋给a[0],把2赋给a[1]。。。
即a[0] =1,a[1] = 2,…a[4] = 5;

如果给了数组大小,但只给了部分元素的初值,则其他未初始化的元素为0;

int a[10] = {1}

这样初始化数组,只有a[0] = 1;其他所有数组元素为0。

(3)第三种方式

这种方式只可以在C99中能用。即定位初始化,如下

int a[10] = {[0] = 3,[2] = 4,6};
  • 用[n]在初始化数据中给出定位
  • 没有定位的位置的数据接在前面位置的后面
  • 特别适合初始数据系数的数组
  • 也可以不给出数组大小,让编译器算

(4)注意

  • 数组变量本身不能被赋值;错误代码示范:
int b[] = a;
  • 数组元素在没有赋值之前不可以被做右值。否则会出现想不到的错误。(详情请看mooc翁恺老师的数组相关章节)
  • 数组定义时[]里面可以是变量(C99即之后),但是不可以用第三种方式初始化,因为编译器并不知道总长度的大小,而给未赋值的位置赋0;,下面是错误示范。
#include <stdio.h>

void main()
{
	int n;
	scanf("%d",&n);
	int a[n] = {0};
}

4.遍历数组

本图片引自翁恺老师的ppt

5.数组的大小

sizeof(a)/sizeof(a[0])
  • 这样的代码,一旦修改数组中的初始数据,不需要修改遍历的代码。

总结

上述只是简单介绍了一维数组的定义、初始化、遍历等操作及注意事项。数组不只有一维的,还有二维,三维…n维。更多介绍请自行百度。


2020/3/5补充

变长数组

从C99开始,C语言新增了可以定义以变量为长度的边长数组。
例如:

#include <stdio.h>

void main()
{
	int length = 0;
	int length2;
	scanf("%d",&length2);
	int a[length];
	int a2[length2];
}

虽然可以这样定义数组,但是变长数组不可以在定义时进行初始化。
更多详情请参考:

  1. 参考网站一
  2. 参考网站二
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值