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

-----------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;
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章