由上例可以看出数组和指针有如下关系:
(p i)=&(s[i]),*(p i)=s[i];
因此,利用上述表达式可以对数组和指针进行互换。两者的区别仅在于:数组s是程序自动为它分配了所需的存储空间;而指针p则是利用动态分配函数为它分配存储空间或赋给它一个已分配的空间地址。
结构与联合前面介绍了C语言中的基本数据类型,在实际进行C语言程序设计时仅有这些基本类型的数据是不够的,有时需要将一批各种类型的数据放在一起使用,从而引入了构造类型的数据——结构与联合。
(一)结构
结构是-种构造类型的数据,它能将多个不同类型的数据变量组合在一起,是一种数据的集合体。组成该集合体的各个数据变量称为结构成员,集合体使用单独的结构变量名。结构中的各个变量之间通常具有一定的关联性,如时间数据中的时、分、秒,日期数据中的星期、午、月、日等。结构是将一组相关联的数据变作为一个整体来进行处理,在程序中使用结构有利于对一些复杂而又具有内在联系的数踞进行处理。
1. 结构变量的定义
方法一:先定义结构类型再定义结构变量名。
定义结构类型的一般形式为:
struct 结构名
{结构元素表};
结构元素表为该结构中的各个成员(又称为结构的域),由于结构可以由不同类型的数据组成,因此对结构中的各个成员都要进行类型说明。
例如定义一个日期结构类型date的格式如下:
定义好一个结构类型之后,就可用它来定义结构变量。一般格式为:
struct 结构名 结构变量名l,结构变量名2,…,结构变量名n;
例如:
struct date d1,d2;
方法二:在定义结构类型的同时定义结构变量名。
将方法一的两个步骤舍在一起,一般格式为:
struct 结构名
{ 结构元素表} 结构变量名1,结构变量名2,…,结构变量名n;
例:
方法三:直接定义结构变量。这种方法可以省略掉结构名,又称为无名结构,-般形式为:
strut
{ 结构元素表} 结构变量名1,结构变量名2,…,结构变量名n;
例如:
方法四:用typedef命名一个结构类型(这时结构名就不太重要了)。
例如: