——黑马程序员——C语言构造类型—结构体(一)

来源:互联网 发布:淘宝爆款怎么做 编辑:程序博客网 时间:2024/05/16 09:28

-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

结构体的基本概念和结构体变量的初始化

一、基本概念

结构体:由用户自己建立由不同类型的数据组成的组合型的数据结构

一般形式:

struct 结构体名

        {成员列表};

例如:定义一学生的结构体

struct stu{

int  num;

char *name;

char sex;

float score;

}; // 注意 此处的分号不能省

二、结构体变量定义的方法

1、先定义结构体,然后再定义结构体变量

定义一个结构体

struct student

{

//学生的学号

int num;

//学生的姓名

char *name;

//学生年龄

int age;

//学生成绩

float score;

};

注意:(1)结构体变量定义完成以后,计算机并不会给结构体分配内存空间,在定义结构体变量后再分配存储空间

定义结构体变量:struct 结构体名  结构体变量名;

struct student stu1;

stu1是变量,他是student类型的,stu1可以存储学生的学号、姓名、年龄、成绩

也可以定义多个结构体变量

struct student  stu2,stu3,stu4...;

2、定义结构体的同时定义结构体变量

struct student

{

//学生的学号

int num;

//学生的姓名

char *name;

//学生年龄

int age;

//学生成绩

float score;

}stu1,stu2,stu3...;

3、使用匿名结构体定义结构体变量

struct 

{

//学生的学号

int num;

//学生的姓名

char *name;

//学生年龄

int age;

//学生成绩

float score;

}stu1,stu2,stu3...;

三、结构体变量中成员的访问

一般形式为:结构体变量名 . 成员名

四、结构体变量的初始化

1、先定义结构体变量再初始化

定义结构体变量

struct student

{

//学生的学号

int num;

//学生的姓名

char *name;

//学生年龄

int age;

//学生成绩

float score;

}stu1;

变量成员初始化

stu1 . num = 38;

stu1 . name = "张三";

stu1 . age = 18;

stu1 . score = 58f;

2、定义结构体变量同时初始化

struct student stu2 = {38,"张三",18,58f};

四、结构体变量存储原理

结构体成员变量对齐:结构变量成员的数据类型不一致,为了提高数据传输速度,计算机每次读取变量成员的起始地址的值是某个数k的倍数,k称为该数据类型的对齐模数

五、结构体变量占用内存大小的计算

1、先找对齐模数,对齐模数是结构体变量成员中占内存最大的那个

2、计算结构体变量中各个成员所占的字节和

#include <stdio.h>#include <stdlib.h>int main(){//定义一个结构体     struct student    {//学生学号  占4个字节int num;        //学生姓名  占1个字节        char *name;        //学生年龄占4个字节        int age;        //学生成绩占4个字节        float score;    }stu1;    //给结构体变量在内存中占有的大小    printf("%d\n",sizeof(stu1));    system("pause");return 0;}

#include <stdio.h>#include <stdlib.h>int main(){//定义一个结构体     struct A    {//占2个字节short a;        //占1个字节        char c;           //以上两个存在一起,        //占4个字节        int i;        //占4个字节        float f;    }a;    //给结构体变量在内存中占有的大小    printf("%d\n",sizeof(a));    system("pause");return 0;}

调整结构体变量的成员位置后结果也不一样

#include <stdio.h>#include <stdlib.h>int main(){//定义一个结构体     struct A    {//占2个字节short a;         //占4个字节        int i;                       //占1个字节        char c;                   //占4个字节        float f;    }a;    //给结构体变量在内存中占有的大小    printf("%d\n",sizeof(a));    system("pause");return 0;}

六、结构体也分为局部结构体和全局结构体

0 0
原创粉丝点击