189 8069 5689

C语言-----结构体-创新互联

74 

目前累计服务客户近1000家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都网站设计、做网站、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。创新互联公司始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。

目录

结构体类型的设计

结构体成员的访问

结构体变量和指针

结构体的内存大小

使用枚举类型

联合体类型



结构体类型的设计

在c语言中,结构体是一种数据类型。

结构体的定义形式为

struct   结构体名

{

成员列表(可以使基本数据类型,指针,数组或其他结构类型);

};

例题:学生结构体

struct student{//关键字struct是数据类型说明符,指出下面说明的是结构体类型,,标识符student是结构体的类型名
char name;
int age;
char sex[4];
int id;
double score;
};//分号不可少

注意:结构体是一种数据类型,市创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要存储空间。

结构体成员的访问

访问格式:结构体变量.成员名

printf("%s\n",stu.name);

结构变量整体赋值三种情况

1)定义结构体变量(用{}初始化)。

2)用已定义的结构变量初始化。

3)结构体类型相同的变量可以作为整体相互赋值。

其他情况只能对成员注意赋值。

在c语言中不能进制转换。

内置类型能够定义指针变量,结构体类型也可以定义结构体类型指针。

结构体变量和指针

结构体类型指针访问成员的获取和赋值形式:
(*p).成员名(.的优先级高于*,(∗p)两边的括号不能少)

p->成员名 (->是减号加大于号,中间没有空格,称为指向符)

在对于结构体成员数据修改时可以用strcpy函数

strcpy((*p).name,"lisi");
strcpy(p->name,"lisi");
结构体的内存大小

1.内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问变量,但是实际上, cup并非逐字节读写内存,而是以2,4,或8的倍数的字节块来读写内存,因此就会对基本数据类型的地址作出一些限制,即它的地址必须是2,4或8的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。

2.由于不同平台对齐方式可能不同,如此一来,同样的结构在不同的平台其大小可能不同,在无意识的情况下,互相发送的数据可能出现错乱,甚至引发严重的问题。

指定对齐值

预处理指令#pragma pack(n)可以改变默认对齐数。

#pragma pack(2)
struct B {//6
char c;//1+1
int i;//4
}
#pragma pack()
#pragma pack(4)
struct A{//16
int i;//4
char c;//1+1
B b;//6
char d;//1
}
#pragma pack()

3.由于存储变量地址对齐的问题,计算结构体大小的3条规则:
1)结构体变量的首地址,必须是结构体变量中的MIN(大基本数据类型成员所占字节数,指定对齐方式)。
2)结构体变量中的每个成员相对于结构体首地址的偏移量,都是MIN(该成员数据类型成员所占字节数,指定对齐方式)。
3)结构体变量的总大小,为结构体变量中MIN(大基本数据类型成员所占字节数,指定对齐方式)。


使用枚举类型

如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓“枚举”就是把可能的值一一列举起来,变量的值只限于列举出来的值得范围内。

使用枚举类型的一般形式

enumerate【枚举名】{枚举元素列表};

例:

enum weekday{sun,mon,tue,wed,thu,fri,sat};//每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5⋯。在上面的定义中, sun的值自动设为0, mon的值为1,⋯, sat 的值为6。
enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}workday,weekend;//常量sun的值为7,mon的值为1,以后的顺序加1,sat为6。
联合体类型

一般结构为

union   联合体名

{

成员列表;

}变量列表;

例:两种形式

union data
{ int i;
 char ch;
 flaoat f;
};
union data a,b,c;

union data
{ int i;
 char ch;
 flaoat f;
} a,b,c;//结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度。例如,上面定义的“共用体”变量a,b,c各占4个字节(因为一个float型变量占4个字节),而不是各占4+1+1=9个字节。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前文章:C语言-----结构体-创新互联
标题链接:http://cdxtjz.cn/article/djiedo.html

其他资讯