标签:
本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储。变量也是有分类型的,不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型、生命周期)。
变量分为全局变量和局部变量。
首先说明一下局部变量的特点
1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。
2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。
3>生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
4>局部变量没有固定的初始值
然后是全局变量的特点
1> 定义:在所有函数外部定义的变量,称为全局变量。
2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。
3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
3>全局变量默认的初始值就是0
1.结构体是系统为我们定义一些包含复杂的变量或者包含类型不同的变量时使用的 ,下面是结构体使用的一些定义规则和使用注意:
#include <stdio.h> int main(int argc, const char * argv[]) { struct Date { int year; int month; int day; };// 定义结构体 struct Date1 { int year; int month; int day; }d1; //定义结构体的同事定义变量 struct { int year; int month; int day; }d2; //省略类型名定义变量 坏处是不能重复使用 struct Date d={2000,1,20};//赋值 第1,2,3个数据一一对应 d.day=30; //可以使用变量.属性调用 /*如果要定义直接写struct Date d2 = {2000,1,20}; struct Date d2; d2 = {2000,1,20}; 这么定义是不对的 */ return 0; }
2.结构体还有几点需要注意:
1>不允许对结构体本身递归定义
2>结构体内可以包含别的结构体
3>定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量
4>结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列
5>结构体所占的内存空间是按照结构体内占用内存最大的类型的倍数 例如
#include <stdio.h> int main(int argc, const char * argv[]) { struct Student{ int age; //4个字节 double gao; // 8个字节 char *name; // 8个字节 };// 定义结构体 struct Student s1={12,1.77,"jack"}; int a=sizeof(s1); printf("%d",a); //输出24 4+8+8=20 取8的最小倍数24 }
3.结构体作为函数参数
将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。
4.指向结构体的指针
结构体指针变量的定义形式:struct 结构体名称 *指针变量名
有了指向结构体的指针,那么就有3种访问结构体成员的方式
1>结构体变量名.成员名
2>(*指针变量名).成员名
3>指针变量名->成员名
枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。
枚举的定义规则
enum 枚举名 {枚举元素1,枚举元素2,……};
例如:
enum Sex{ man,//0 woman,//1 unknown, //2 }
enum Sex s=man;
PS:枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
总结:在本章中,我们学习了结构体和枚举的相关知识,这些知识虽然感觉上没有其他知识那么复杂,但也是常用的数据类型,所以也是我们应该掌握的。主要学习了结构体的定义,其中定义结构体变量有三种不同的方式,还学习了结构体的内存分析,包括结构体的作用域,内存分配和所占存储空间,结构体跟之前所学复杂数据类型数组,指针等有密切的联系和应用,结构体也重点讲述了结构体和数组,指向结构体的指针,同时了解了结构体和函数的关系,当结构体作为函数参数的一些注意点。还学习了枚举在C语言中的定义方式,因为C语言中没有bool类型,所以我们经常要用到枚举,由于枚举相当于定义了枚举常量,所以返回值仍然是int类型数据。
黑马程序员学习笔记--------C语言变量类型,结构体,枚举
标签:
原文地址:http://www.cnblogs.com/yukinoshita/p/5380536.html