600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 游戏筑基开发之结构体(数组 指针) 枚举 共用体 typdef(C语言)

游戏筑基开发之结构体(数组 指针) 枚举 共用体 typdef(C语言)

时间:2023-02-20 00:17:31

相关推荐

游戏筑基开发之结构体(数组 指针) 枚举 共用体 typdef(C语言)

1.结构体类型

在C语言中,结构体是一种复合数据类型,也就是,一个数据类型中包含多种数据类型(包括复合数据类型)。其字节大小为所有成员函数所占大小之和。

结构体声明:

struct [结构体名]

{

数据类型 变量名;

数据类型 变量名N;

}[变量名][, 变量名 = {值1,…,值N}];

//标准定义结构体struct tagStu{char name[1024];int num;}stu1, stu2 = {"张三",20 };// 匿名结构体struct{char name[1024];int num;}stu11, stu22 = {"张三",20 };//结构体作为另一结构体的数据成员struct tagScore{float n1;float n2;float n3;};struct tagStu1{char name[1024];int num;struct tagScore socre;};

结构体变量的定义:

struct 结构体名 变量名 [={初始值}];

struct tagStu1 stu33 = {"李四",200,{100,200,300} };struct tagStu1 stu44;stu44 = stu33;//底层是memcpy(&stu44,&stu33,sizeof(struct tagStu1));

memcpy(&stu44,&stu33,sizeof(struct tagStu1));//无条件将stu33 的内存数据拷贝值stu44中,最后一个参数是复制的字节长度。

//C语言底层具体实现大致如下:void memcpy(void* dest, void* src, int size){for (int i = 0; i < size; ++i)*(((unsigned char*)dest) + i) = *(((unsigned char*)src) + i);}

访问结构体:

结构体变量名.成员变量名;

//匿名结构体访问方式printf("%s,%d\n", stu22.name, stu22.num);//标准结构体的访问方式printf("%s,%d\n", stu33.name, stu33.num);printf("%f,%f,%f\n", stu33.socre.n1, stu33.socre.n2, stu33.socre.n3);

2.结构体数组

数组中每个元素都是结构体,结构体数组是用来表示相同用数据类型的集合。

结构体数组的定义:

struct 结构体名 变量名[数组长度] [={初始值}];

struct tagStu1 stus[10] = {{"李四",200,{100,200,300} },{"王五",200,{100,200,300} } };

访问方式:

数组名[下标].成员变量 = 值;

stus[0].namestus[0].num = 700;

3.枚举类型

枚举类型在开发中使用的较多,常用它来代替,宏常量。

用途:增强代码可读性、标记当前物体等。

枚举是一个整数类型,只占4个字节。

枚举的声明:

enum [枚举名称]

{

枚举值名称 [=值],

枚举值名称 [=值],

枚举值名称 [=值],

};

TIPS:枚举值名称的值不能重复,并且如果在忽略的情况下自动+1。

enum EType{E_Wall = 100,E_Food,E_None,};

枚举的访问:

enum 枚举名称 变量名 = 值;

enum EType e = E_Wall;int a = sizeof(enum EType);//4switch (e){case E_Wall:break;case E_Food:break;case E_None:break;default:break;}

4.共用体

顾名思义,它是共享类型的,如果说,结构体类型是每个成员变量有单独的内存,而共用体类型则是使用相同的内存,注意以最大的单位申请内存,也就是说,不管你使用几字节内存,全部按最大的内存申请。

union Union{unsigned char arr[4];int num;};union Union u;u.num = 0xff00ff;printf("%d %d %d", u.arr[0], u.arr[1], u.arr[2]);int b = sizeof(union U);

5.结构体指针

结构体指针和普通指针类似,只不过,在访问成员变量的方式上有一些小区别。

结构体指针本质上是指针。

结构体指针的声明:

struct 结构体名称* 变量名;

struct tagStu* p = NULL;p = malloc(sizeof(struct tagStu));

结构体指针的使用:

变量名->成员变量; / (*变量名).成员变量;

p->num = 200;free(p);//释放指针p = NULL;//置为空

TIPS:

野指针:指向无效的内存空间;

空指针: 指向NULL;

6.typedef 别名

用途:统一C和C++编码问题。

别名的声明:

typedef 原数据类型 别名名称;

typedef struct tagStu TStu;TStu s1;s1.num = 200;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。