8.1.结构体

编程入门 行业动态 更新时间:2024-10-09 19:14:42

8.1.<a href=https://www.elefans.com/category/jswz/34/1771419.html style=结构体"/>

8.1.结构体

结构 (重要)

        结构是c语言分配内存的第三大方法

                1.通过定义变量(少量分配)

                2.采用数组(数据类型一致)

                3.结构体

                 (1)结构是一种由若干成员组成的构造类型

                 (2)结构的成员既可以是基本类型的数据,也可以又是数据类型的数据

                 (3)结构是一种构造而成的数据类型,在使用结构之前必须先行定义

                        因此结构也是一种自定义数类型

                 (4)结构类型的数据在存储上类似于数组,所有成员按其被声明的顺序,由低地址到高地址连续(或接近连续)存放

                 (5)与数组不同,结构的成员可以是不同类型的数据,因此结构也是一种复合数据类型。

                6.指向结构变量和结构数组的指针

                结构指针的计算以整个结构的大小为单位

                7.访问结构的成员

                通过结构变量访问其成员,用成员访问运算符“ . ”

                通过结构指针访问其目标的成员,用间接成员访问运算符 “ -> ”

                8.如果函数的参数是结构类型,那形参只是实参的拷贝,在函数内部无法修改实参的成员

                9.如果函数的参数是结构指针,并接受实参的地址,那就可以在函数内部修改实参的成员

                (6)定义方式:

                        1.直接定义结构类型变量(用的很少)

                                struct {

                                        数据类型1 成员1;

                                        数据类型2 成员2;

…………

                                }变量;

                                例如:

                                struct {

                                char name[32];//姓名

                                int age;//年龄

                                }stu1 = {"a",18};

                        其缺点为:

                                每定义一个变量都需要写一次结构体

代码如下:

        1 //结构体定义方法1:直接定义结构体数据类型变量

        2 //切记:结构体的本质就是一种数据类型,是自定义的数据类型,程序员根据需求发明创造的数据类型

        3 //用结构体数据类型分配的内存可以做到数据类型不一致。

//结构体玩法1:直接定义结构体数据类型变量(用的少)
//切记:结构体的本质就是一种数据类型,是自定义数据类型,程序员根据需求发明创造的数据类型
//用结构体数据类型分配的内存可以做到数据类型不一致
#include <stdio.h>
#include <string.h>
int main(void) {//直接定义结构体数据类型的变量并且初始化struct {char name[32]; //存储学生的姓名int age; //存储学生的年龄}stu1 = {"小白", 18};//打印学生信息printf("%s, %d\n", stu1.name, stu1.age);//修改strcpy(stu1.name, "李小白");stu1.age++;//打印学生信息printf("%s, %d\n", stu1.name, stu1.age);return 0;
}

2.先声明结构类型(头文件),再用该类型定义变量(源文件)

struct 结构类型名 {

        数据类型1 成员1;

        数据类型2 成员2;

……………

}; //声明

struct 结构类型名 变量;//定义,把struct结构体类型名类比成int类型

例如:

struct student {

        char name[32];

        int age;

};

struct student stu1;//类比成int stu1

        其初始化方式有两种:

                1.struct student stu1 = {"小白",18} 传统初始化,必须元素齐全且必须按照声明的顺序

                2. struct student pstu = {.age = 18, .name = "小白"}; //标记初始化 ,不需要按照顺序,不需要全部初始化

        当初始化指针 struct student * stu2时

                pstu ->age, pstu->name

代码如下:

//结构体数据类型玩法2:先声明一个结构体数据类型(先发明创造一个结构体类型,类似创造一个int)
//然后用该结构体数据类型定义结构体变量来实现内存分配
#include <stdio.h>
#include <string.h>
//声明结构体数据类型来描述学生的基本信息,造一个自己的int一样
struct student {char name[32]; //描述姓名int age; //描述年龄
};//好比把struct student当成int来看
int main(void) {//定义结构体数据类型变量来分配内存存储学生信息//struct student stu1 = {"小白", 18}; //传统初始化struct student stu1 = {.age = 18, .name = "小白"}; //标记初始化,类比:int stu1 = ...struct student *pstu = &stu1; //pstu指向stu1,类比:int *pstu = &stu1;printf("%s, %d\n", stu1.name, stu1.age);printf("%s, %d\n", pstu->name, pstu->age);strcpy(stu1.name, "李小白");pstu->age++;printf("%s, %d\n", stu1.name, stu1.age);printf("%s, %d\n", pstu->name, pstu->age);return 0;
}

3.通过typedef定义类型别名,再用该别名定义变量

        typedef int s32 //相当于给int定义别名s32

        typedef struct 结构类型名 {

                数据类型1 成员1;

                数据类型2 成员2;

…………

        } 类型别名;

        类型别名 变量;

        例如:

        typedef struct student { //student名称可以省略

               char name[32];

                int age;

        }stu_t; //当用tpyedef给一个类型取别名是,一般加一个_t 告诉他人这个类型是别名

        stu_t stu1;

代码如下:

//结构体数据类型玩法3:先声明一个结构体数据类型(先发明创造一个结构体类型,类似创造一个int)
//然后给结构体数据类型用typedef取别名,最后用别名定义结构体变量来实现内存分配
#include <stdio.h>
#include <string.h>
//声明结构体数据类型并且取别名来描述学生的基本信息,造一个自己的int一样
typedef struct student {char name[32]; //描述姓名int age; //描述年龄
}stu_t;//给struct student取别名叫stu_t,好比把stu_t当成int来看
int main(void) {//定义结构体数据类型变量来分配内存存储学生信息//stu_t stu1 = {"小白", 18}; //传统初始化stu_t stu1 = {.age = 18, .name = "小白"}; //标记初始化,类比:int stu1 = ...stu_t *pstu = &stu1; //pstu指向stu1,类比:int *pstu = &stu1;printf("%s, %d\n", stu1.name, stu1.age);printf("%s, %d\n", pstu->name, pstu->age);strcpy(stu1.name, "李小白");pstu->age++;printf("%s, %d\n", stu1.name, stu1.age);printf("%s, %d\n", pstu->name, pstu->age);return 0;
}

更多推荐

8.1.结构体

本文发布于:2024-02-27 19:16:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766139.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:结构

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!