数据类型 | 结构体

打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

定义

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

看下面的例子——声明一个有关学生的结构体
它就可以声明在变量的内部,也可以在变量的外部。
  1. struct student {
  2.     int id;
  3.     char *name;
  4. };
复制代码
How to 定义

使用上还算简单,就像是平常用变量一样
  1. #include <stdio.h>
  2. struct student {
  3.     char *id;
  4.     char *name;
  5. };
  6. int main() {
  7.     struct student Mryan2005;
  8.     Mryan2005.id = "007";
  9.     Mryan2005.name = "Mryan2005";
  10.     printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
  11. }
复制代码
程序里面就会输出这样的东西
  1. Mryan2005's id is 007
复制代码
其实,还有第二种办法。
  1. #include <stdio.h>
  2. struct {
  3.     char *id;
  4.     char *name;
  5. } Mryan2005;
  6. int main() {
  7.     Mryan2005.id = "007";
  8.     Mryan2005.name = "Mryan2005";
  9.     printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
  10. }
复制代码
当然,程序里面就会输出这样的东西
  1. Mryan2005's id is 007
复制代码
但这样的做法也只是因为这个结构体是暂时的。
最后一种写法是这样的
  1. #include <stdio.h>
  2. struct student {
  3.     char *id;
  4.     char *name;
  5. } Mryan2005;
  6. int main() {
  7.     Mryan2005.id = "007";
  8.     Mryan2005.name = "Mryan2005";
  9.     printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
  10. }
复制代码
当然,程序里面就会输出这样的东西
  1. Mryan2005's id is 007
复制代码
结构在内存中的体现
还是这个结构体
  1. struct student {
  2.     int id;
  3.     char *name;
  4. };
复制代码
我们可以先看一下sizeof(struct student)的结果是多少
  1. #include <stdio.h>
  2. struct student {
  3.     char *id;
  4.     char *name;
  5. };
  6. int main() {
  7.     printf("size of student is %d", sizeof(struct student));
  8. }
复制代码
它的size是16。
至于为什么等于16,那是因为我在64位的操作系统中运行,所以,一个指针变量为8个字节;如果在32位系统下,则指针占用4字节。
初始化

第一种办法
  1. #include <stdio.h>
  2. struct student {
  3.     int order
  4.     char *id;
  5.     char *name;
  6. } Mryan2005;
  7. int main() {
  8.     struct student Mryan2005 = {01, "007", "Mryan2005"};
  9. }
复制代码
这就出现了这样的情况

第二种办法
  1. #include <stdio.h>
  2. struct student {
  3.     int order;
  4.     char *id;
  5.     char *name;
  6. } Mryan2005;
  7. int main() {
  8.     struct student Mryan2005 = {.id = "007", .name = "Mryan2005"};
  9. }
复制代码
id和name被赋予了具体的值,而order没有,那结果就是order为0。
这就会是这样子了

结构运算

整体运算
  1. #include <stdio.h>
  2. struct student {
  3.     int order;
  4.     char *id;
  5.     char *name;
  6. } Mryan2005;
  7. int main() {
  8.     Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
  9. }
复制代码
变量与变量间直接赋值

就是这样
  1. #include <stdio.h>
  2. struct student {
  3.     int order;
  4.     char *id;
  5.     char *name;
  6. };
  7. int main() {
  8.     struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
  9.     struct student Mryan2003 = Mryan2005;
  10. }
复制代码
先说一下,(struct student){ 1, "007", "Mryan2005"}是什么意思?
这个意思就是,将{ 1, "007", "Mryan2005"}强制转换成struct student类型
我们看一下,结果会是怎么样

这就是数组做不了的,结构可以做。
那改动一个值,又会是怎么样的结果
  1. #include <stdio.h>
  2. struct student {
  3.     int order;
  4.     char *id;
  5.     char *name;
  6. };
  7. int main() {
  8.     struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
  9.     struct student Mryan0415 = Mryan2005;
  10.     Mryan0415.name = "Mryan2005";
  11. }
复制代码
结果竟然是这样

结构成员

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表