c语言:结构体、枚举、宏和动态内存分配

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结构体、枚举、动态内存分配和宏

==========================

【结构体】

一、认识结构体

结构体是一种复合的数据结构,是将基础变量类型和复合的变量类型封装成的新的数据结构体。结构体是一种自定义的类型。

struct sct{

int a;

char b;

};

strct sct aa;

int a;

//如果说,数组是相同类型变量的集合,那么结构体可以是相同元素的集合,也可以是不同元素的集合。

//这里声明了一个结构体,实际上是创建了一个新的变量类型,就像int,本身没有空间。只有用变量类型声明的变量才有空间。如int a。

// 比如int =9,错误。

int main(void)

{

struct sct s1,s2; //声明了两个结构体变量。

//s1有空间,所有s1是一个由int a;char b组成的空间。声明s1,如同声明了一个a和一个b。a和b称为s1的两个成员。

s1.a=9;

s1.b=’T’;

}

问:为什么声明结构体,声明结构体有什么用?

比如说存储班级学生的姓名和学号,

struct student{

char name[];

char ID[20];

};

struct student a[60];

【注】函数是对处理数据的功能的封装。

结构体是对存储数据的数据结构的封装。

二、结构体的赋值和初始化

struct point{

int x;

int y;

};

int main(void)

{

//初始化

//按照每个成员的初始化方式分别初始化。

struct point pp={3,4};

struct point pp2;

struct point pp3;

//赋值

//结构体可以整体赋值。但是没有结构体常量

pp2=pp;

//结构体也可以分别对成员赋值

pp3.x=5;

pp3.y=pp2.x;

printf(“%d %d\n”,pp3.x, pp3.y);

return 0;

}

【注】结构体里也可以包含其它结构体

struct rect{

int num;

struct point p;

};

struct rect re;

re.p.x=9;

re.num=2;

在IOS当中结构体的典型应用(储存坐标)

三、

typedef unsigned long size_t

结构体取别名

typedef existing new

struct point{

int x;

int y;

};

typedef struct point mypoint; //给结构体取别名

struct point aa;

mypoint aa;

应用

mypoint pp={3,4};

或者是

typedef struct point{

int x;

int y;

}mypoint;

或者是

typedef struct{

int x;

int y;

}mypoint;

四、返回结构体的函数

typedef struct{

float x;

float y;

}mypoint;

typedef struct{

float length;

float width;

}mysize;

typedef struct{

mypoint origin;

mysize size;

}myrect;

//因为结构体可以整体赋值,因此结构体可以整体作为函数返回值。myrect myrectmake(float x,float y,float length, float width) {

myrect rect={{x,y},{length,width}};

return rect;

}

int main(void)

{

myrect rect={{100,200},{200,50}};

// rect.origin.x=10;

// rect.origin.y=20;

//太麻烦

rect = myrectmake(10,20,160,32);

return 0;

}

五、结构体的大小

typedef struct{

int a;

int b;

}mysct;

mysct sct;

printf(“ld ld\n”,sizeof(mysct),sizeof(sct));

typedef struct{

int a;

char b;

}mysct;

mysct sct;

printf(“ld ld\n”,sizeof(mysct),sizeof(sct));

typedef struct{

int a;

char b;

char c;

}mysct;

mysct sct;

printf(“ld ld\n”,sizeof(mysct),sizeof(sct));

typedef struct{

char a;

int b;

char c;

}mysct;

mysct sct;

printf(“ld ld\n”,sizeof(mysct),sizeof(sct));

补齐

计算机寻址通常都是以4字节或者是8字节寻址。【注】不同设备对齐方式不同

网络传输时,跨越不同平台,数据传输可能会出错typedef struct{

char a;

int b;

char c;

}__attribute__((packed)) mysct; //不对其,塞满

mysct sct;

printf(“ld ld\n”,sizeof(mysct),sizeof(sct));

六、结构体指针

typedef struct{

int x;

相关文档
最新文档