C语言中的数组

C语言中的数组

学习c语言,数组很重要。数组可以作为一种储存多个相关项的便利方式。它可以按顺序储存一系列类型相同的值。需要使用数组的时候,我们首先需要通过声名数组告诉编译器数组内包含多少元素和这些元素的类型。编译器根据这些信息正确的创建数组。普通变量可以使用的类型,数组元素都可以用。

/*一些常用的数组声明*/
	float candy[365];	//内涵365个float类型元素的数组
	char code[12];		//内含12个char类型元素的数组
	int states[50];		//内含50个int类型元素的数组
	int * risks[10];   	//内含10个int指针类型元素的数组
	int (* uof[3])[4];	//内含3个指针元素的数组,其中每个指针都指向一个内含4个int类型元素的数组
	void (*pf[3])(char *);//内含3个指针元素的数组,其中每个指针都指向一个参数为char *类型,返回值为void的函数

初始化数组

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

如上所示,用逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔,在逗号和值之间可以使用空格。
有时需要把数组设置为只读。这样,程序只能从数组中检索值,不能把新值写入数组。要创建只读数组,应该用const关键字来声明和初始化数组。例如:

	const int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

通过上面的修改,程序在运行过程中就不能修改该数组中的内容了。

非正常初始化可以大致分为三种

  1. 未初始化
    如果未在定义数组的时候初始化数组元素,编译器便会使用内存相应位置上的现有值作为默认值。
  2. 初始化部分
    如果初始化的元素数量少于数组的总数量,那么未被初始化的元素会被初始化为0。
  3. 初始化过多
    如果初始化的元素多于数组的总数量,那么编译器便会报错。
    注:如果初始化数组时省略了放括号中的数字,编译器会根据初始化列表中的项数来确定数组的大小

数组元素的赋值

声明了数组元素以后,可以借助数组下标(或索引)给数组元素赋值。例如:

	int counter,test[5];
	for(counter=0;counter<5;counter++)
	{
		test[counter]=2*counter;
	}

需要注意的是C不允许数组作为一个单元赋给另一个数组,除初始化以外也不允许使用花括号列表的形式赋值。下面的代码演示一些错误的赋值形式:

#define SIZE  5
int mian(void)
{
	int oxen[SIZE]={1,2,3,4};
	int yaks[SIZE];
	yaks=oxen;
	yaks[SIZE]=oxen[SIZE];
	yaks[SIZE]={4,3,2,1};
}

指针和数组

指针提供了一种以符号形式使用地址的方法。因为计算机的硬件指令非常依赖地址,指针在某种程度上把程序员想要传达的指令更加接近机器的方式表达。因此,使用指针的程序更有效率。尤其是指针能够有效的处理数组。数组表示法其实是变相的使用指针。
我们举一个变相使用指针的例子:数组名是数组首元素的地址。也就是是说如果test是一个数组,下面的语句成立:

	test=&test[0];
	test +2==&test[2];
	*(test +2)==test[2];

以上的关系表明了数组和指针的关系十分密切,可以使用指针标识数组的元素和获得元素的值。从本质上看,同一对象有两种表示法。实际上,C语言标准在描述数组表示法时确实借助了指针。也就是说ar[n]的意思是*(ar+n)。可以认为*(ar+n)的意思是“到内存ar的位置,然后移动n个单元,检索储存在那里的值”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值