随笔 - 31  文章 - 0  评论 - 0  阅读 - 3251

数据类型 | 结构体

定义

结构是一种复合的数据类型,可以包含多个不同类型的成员变量。
我们可以通过结构类型声明结构,并通过结构变量来访问结构的成员。结构变量可以赋初值,可以进行运算,还可以作为函数参数传递。

How to 声明

看下面的例子——声明一个有关学生的结构体
它就可以声明在变量的内部,也可以在变量的外部。

struct student {
int id;
char *name;
};

How to 定义

使用上还算简单,就像是平常用变量一样

#include <stdio.h>
struct student {
char *id;
char *name;
};
int main() {
struct student Mryan2005;
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}

程序里面就会输出这样的东西

Mryan2005's id is 007

其实,还有第二种办法。

#include <stdio.h>
struct {
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}

当然,程序里面就会输出这样的东西

Mryan2005's id is 007

但这样的做法也只是因为这个结构体是暂时的。
最后一种写法是这样的

#include <stdio.h>
struct student {
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}

当然,程序里面就会输出这样的东西

Mryan2005's id is 007

结构在内存中的体现
还是这个结构体

struct student {
int id;
char *name;
};

我们可以先看一下sizeof(struct student)的结果是多少

#include <stdio.h>
struct student {
char *id;
char *name;
};
int main() {
printf("size of student is %d", sizeof(struct student));
}

它的size是16
至于为什么等于16,那是因为我在64位的操作系统中运行,所以,一个指针变量为8个字节;如果在32位系统下,则指针占用4字节。

初始化

第一种办法

#include <stdio.h>
struct student {
int order
char *id;
char *name;
} Mryan2005;
int main() {
struct student Mryan2005 = {01, "007", "Mryan2005"};
}

这就出现了这样的情况
image

第二种办法

#include <stdio.h>
struct student {
int order;
char *id;
char *name;
} Mryan2005;
int main() {
struct student Mryan2005 = {.id = "007", .name = "Mryan2005"};
}

idname被赋予了具体的值,而order没有,那结果就是order0
这就会是这样子了

结构运算

整体运算

#include <stdio.h>
struct student {
int order;
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
}

变量与变量间直接赋值

就是这样

#include <stdio.h>
struct student {
int order;
char *id;
char *name;
};
int main() {
struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
struct student Mryan2003 = Mryan2005;
}

先说一下,(struct student){ 1, "007", "Mryan2005"}是什么意思?
这个意思就是,将{ 1, "007", "Mryan2005"}强制转换成struct student类型
我们看一下,结果会是怎么样
image
这就是数组做不了的,结构可以做。
那改动一个值,又会是怎么样的结果

#include <stdio.h>
struct student {
int order;
char *id;
char *name;
};
int main() {
struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
struct student Mryan0415 = Mryan2005;
Mryan0415.name = "Mryan2005";
}

结果竟然是这样
image

结构成员

我们可以用.访问其成员,例如:Mryan2005.id
我们就可以访问到Mryan2005中的id

结构指针

结构的名字不是变量的地址,必须要用&
struct date *Mystudent = &Mryan2005;

posted on   Mryan2005  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示