赞
踩
目录
-- 是数据类型
1、保存一个数据类型的数据 -- 是基本数据类型 -- “变量”
2、保存多个具有相同数据类型的数据 -- “数组”
3、保存多个具有不同数据类型的数据 -- “结构体”
4、保存多个数据类型的数据,且地址不连续 -- “链表” --数据存储形式
1、是第一个自定义类型
-- struct 类型名{成员变量;};
注:没有类型名也行,但是无法引用
2、定义类型时是否占用内存空间?
-- 不占用内存空间 -- 仅是声明类型的内容,不开辟空间。(在main函数之上)
-- 该函数的作用是获取数据类型的空间大小
1)找到结构体中(基本数据类型中)最大的成员变量所占的字节数。(其实就是最大的基本数据类型的字节长度)
2)结构体中成员变量的起始地址为该成员变量大小的整数倍(一般情况下我们认为第一个成员变量的其实地址为0)。
3)结构体变量的总大小必须要是结构体中最大变量字节的整数倍(不足补齐)。
例1:
注:首先,起始地址是0,那么int的起始地址是char数组的整个长度,就是20,20是sizeof(int)--“4”的整数倍,所以不用补,直接加4,然后起始地址变为24,之后与double比较,发现是sizeof(double)的整数倍,所以不用补,直接加8,起始地址变为32,最后拿32再与结构体中最大的基本数据类型的长度比较,也就是看32是不是sizeof(double)的整数倍,如果是就不用再变了。 如果不是,补齐即可,不用再加。
例2:
注:结构体student1中,起始地址是0,然后加上char的长度是1,起始地址变为1,然后拿1与结构体数据类型中的最大数据类型长度比较(这里就是sizeof(double)),发现不是它的整数倍,于是加到8,然后再加上结构体的总长度,就是40,然后将40与student1中最大的数据类型的比较,发现是它的整数倍,所以不用再变了。
-- 类型名写于不写都可以
a.普通的定义
b.宏定义 -- #define
-- 它是预处理中的宏定义命令,在预处理时进行简单的字符串替换,不作正确性检测。
-- #define的弊端:
-- 只有a被定义为指针类型,b是int类型。这是因为宏定义只是简单的替换,很容易再使用的时候出现错误,如放在式子中优先级的问题之类。
c.类型重定义 -- typedef
-- typedef是关键字,在编译时处理,有类型检测的功能,它在自己的作用域内给一个数据类型取一个新的名字。typedef主要用来定义数组、指针、结构体等类型。
a. 在定义变量的同时进行初始化 --{}
注:按顺序部分初始化可以,不按顺序不行。要想不按顺序,需要用"."进行运算。
b. 先定义变量,再进行初始化
-- 变量名.成员变量名 -- 只能在函数内部进行"."运算,在函数外不行。
!!!注:
在对字符串数组进行赋值时,如果是在定义时初始化,可以直接用字符串常量进行赋值。只有在定义时同时初始化才可以直接="字符串";char a[10]="";省略大括号{}。
但是先定义,后对a[]="字符串"赋值不行,只能用字符串常用函数复制过来,只要时先定义,后面再赋值的,只能通过复制,如果数组的内容是整形,就要一个一个赋值。
a. 结构体 -- 结构体变量.成员变量 =》就是成员变量的空间
b. 结构体数组 -- 数组元素是结构体 -- stu[i].id
c. 结构体指针 -- 结构体指针->成员变量 =》是成员变量的空间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。