所有C语言数组和指针的知识都在这里了!|周立功手把手教你学C语言编程
第一章为程序设计基础,本文为1.6.1数组与指针。
>>> 1.6.1 数组与指针
1. 数组
(1)数组的声明
我们知道,一个基本数据类型的变量只能存储一个数据,比如:
int data = 0x64;
如果需要存储一组int型数据呢?比如,1、2、3,则至少需要3个变量data0、data1、data2。比如:
int data0 = 1, data1 = 2, data2 = 3;
由于数据的表现形式多种多样,还有字符型和其它的数值类型,因此仅有基本数据类型是不够的。是否可以通过基本数据类型的组合抽象构造其它的数据类型呢?答案是可以的,构造数据类型数组就是这样产生的。
从概念的视角来看,int型整数1、2和3都是相同的数据类型,data0、data1和data2三个变量的共性是data,其差异性是下标不一样。因此可以将data0、data1和data2抽象为一个名字,然后用下标区分这些变量的集合——data[0]、data[1]和data[2]。如果有以下声明:
int data[3]; // 解读为data是int数组(元素个数3)
那么data[3]就成了存放3个int型数据1、2、3的data[0]、data[1]和data[2]所组成的数组,即可分别对data[0]、data[1]和data[2]赋值:
data[0] = 1, data[1] = 2, data[2] = 3;
当然,也可以按照以下方式声明一个数组并进行初始化:
int data[3] = {1, 2, 3};
通常将data称为数组(变量)名,data[0]、data[1]和data[2]被称为变量。因而可以说,数组是将相同类型数据的若干变量按有序的形式组织起来,用一个名字命名,然后用下标区分这些变量的集合。
由于数组是建立在其它类型的基础上,因此C将数组看作构造类型,在声明数组时必须说明其元素的类型。比如,int类型的数组、float类型的数组或其它类型的数组。而其它类型也可以是数组类型,在这种情况下,创建的是数组类型的数组,简称数组的数组。
(2)下标与变量的值
在这里,定义了一个名为data的数组类型变量,它是由存放3个int型数据1、2、3的变量data[0]、data[1]和data[2]组成的。通常又将数组的各个变量称为数组的元素,而数组的元素是按照顺序编号的,这些元素的编号又称为数组元素的下标。
由于有了下标,因此数组元素在内存中的位置就被唯一确定下来了。下标总是从0开始的,最后一个元素的下标为元素的个数减1(即2),data[0]叫第1个元素,data[1]叫第2个元素,data[2]叫第3个元素,也就意味着所有的元素在内存中都是连续存储的。
直观上,数组是由下标(或称为索引)和值所组成的序对
函数Create(data, size)创建一个新的具有适当大小的空数组,初始时数组的每一项都没有定义。Retrieve操作接受一个数组data和一个下标index,如果下标合法,则该操作返回与下标关联的值,否则产生一个错误。Store操作接受一个数组data、一个下标index和一个项item的集合,即项是value值的集合,有时也将值(value)称为项(item),返回在原来数组中增加新的序对
显然,int系的任何常量表达式都可以作为数组元素的下标。比如:
int array[3+5]; // 合法
int array['a']; // 表示int array[97];
上述定义之所以合法,因为表示元素个数的常量表达式在编译时就具有确定的意义,与变量的定义一样明确地分配了固定大小的空间。
虽然使用符号常量增强了数组的灵活性,但如果定义采用了以下的形式:
int n = 5;
int array[n]; // 非法
- 程序设计基础:字符能像整数一样计算(07-29)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 周立功《程序设计与数据结构》:字符串函数(08-05)
- 周立功手把手教你学C语言编程:用数组,构造一个双重指针(08-04)
- 周立功教你学程序设计结构体:内存对齐和基本数据类型(08-01)
- 跟周立功学C语言编程:如何将二维数组作为函数参数传递?这三要素要时刻谨记!(08-06)