首页 百科知识 变量的作用域从定义的位置开始

变量的作用域从定义的位置开始

时间:2022-10-17 百科知识 版权反馈
【摘要】:对例4-7中的学生信息,可以定义一个名为student的结构类型,将这4项信息包容在一起构成学生的个人信息:其中,struct是结构类型的标志,它是C的关键字,不能省略。比如,前面定义的struct student不是一个变量,C语言不会为它分配内存单元。struct student是一个结构类型,其用法与C的基本类型int、float、char等相同,都是一个模板,以后的程序可以用它来定义变量。

4.4.1 结构及结构变量的定义

对例4-7中的学生信息,可以定义一个名为student的结构类型,将这4项信息包容在一起构成学生的个人信息:

img372

其中,struct是结构类型的标志,它是C的关键字,不能省略。student是结构类型名,是由编程者自己选定的,它与系统定义的int、float、double、char一样,也可以用于定义变量的类型。大括号所括起来的4条语句是结构类型中4个成员的定义,它们可以定义为任何数据类型。

结构类型定义的一般格式为:

img373

注意:

(1)结构类型名和各成员名都应是C语言合法的标志符,结构类型名不得与其他变量的名字相同,但成员名可以与变量名相同,例如在程序中也可以定义一个名为height的变量,它与student结构中的height成员是两回事,互不干扰。

(2)结构类型定义之后一定要跟一个分号。

(3)与数组的定义不同,定义数组时直接定义变量,并为变量分配了相应的内存空间,而这里定义的是结构类型而不是变量。比如,前面定义的struct student不是一个变量,C语言不会为它分配内存单元。struct student是一个结构类型,其用法与C的基本类型int、float、char等相同,都是一个模板,以后的程序可以用它来定义变量。

定义了结构类型后,就可以用它来定义变量。可见要定义一个结构类型的变量,必须先定义结构类型,再定义结构变量

比如前面已经定义了一个结构类型struct student,可以用它来定义变量,例如:

  struct student stu1,stu2;

就定义了两个分别名为stu1和stu2的student类型的变量,并为它们分配了相应的内存空间,它们在内存中的情况如图4.4.1所示(假设int型占用4字节,如在VC++6.0中)。

img374

图4.4.1 student类型变量占用的内存空间

也可以在定义结构类型的同时定义变量,这种定义的一般形式为:

img375

它的作用与第一种方法相同。

另外,也可以不定义结构类型,直接定义结构变量,其一般形式为:

img376

用这种方法定义的结构变量称为匿名结构变量。当然在实际的程序设计中,很少使用这种方式来定义结构变量。

前面提到,结构类型的成员可以是任意数据类型,当然也可以是一个结构类型。

比如,在前面定义的student类型中,对生日的描述使用的是整型变量,不很直观,在输入和处理时也不方便,可以将生日信息用结构类型来描述。

生日包括年、月、日三个信息,它们都是整数。因此,可定义一个结构类型date,用于描述日期:

img377

这样用于描述学生信息的结构student,修改如下:

img378

需要注意的是,用这种方法定义时,对结构类型date的定义一定要写在结构类型student的定义之前。

使用这里的student类型定义的变量在内存中的使用情况如图4.4.2所示。

img379

图4.4.2 student类型变量占用的内存空间

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈