微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 所有C语言数组和指针的知识都在这里了!|周立功手把手教你学C语言编程

所有C语言数组和指针的知识都在这里了!|周立功手把手教你学C语言编程

时间:08-01 来源:ZLG致远电子 点击:

第一章为程序设计基础,本文为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];                  // 非法

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top