基于linux的c语言

本文详细介绍了C语言在Linux环境下的动态内存管理,包括动态内存的概念、申请和释放空间的函数。同时,文章探讨了构造类型,如结构体、共用体和枚举的定义、使用及特点,为读者提供了深入理解C语言内存管理和构造类型的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态内存与构造类型

一,动态内存

        1,概念

             动态内存:由管理员进⾏申请内存空间来使⽤(申请⼤⼩也是我们决定)存储数据, 访问数据;管理员⾃⼰进⾏释放内存空间的使⽤⽅式。

        动态内存的存储的区域------堆区,它由程序员⾃⼰管理 动态内存的申请与释放是程序员通过调⽤库函数来实现。

        2,申请空间

        #include < xxx  >    xxx在这⾥就有对应的库函数

        申请空间:在堆空间中申请指定size字节⼤⼩的空间⽤于使⽤,申请成功会 把申请的空间⾸地址(开始地址)返回,如果失败返回NULL(0x0地址)

        void * malloc(unsigned int size);

        3,释放空间

                从堆空间中,释放指定地址ptr对应的空间

                void free(void * ptr);         free(空间⾸地址);

        注:申请的空间一定要记得释放,如果不释放就会一直占用,系统不会自动释放。

二,构造类型

        1,概念

        构造类型:int、float、double...叫做基础类型,而由这些类型做成的、含有多个的组合类型称为构造类型。

        2,结构体

        ⼀种类型,这种类型由多个部分构成,每个部分只表⽰⼀个信息(内 容),共同组合表⽰⼀个完整的信息内容,⼀个新的类型

        类型声明:----说明有⼀个新的类型(不表⽰有这个类型的变量)

        struct 结构体名-----表⽰新的类型名

        {

                数据类型1 成员名1;

                数据类型2 成员名2;

                数据类型3 成员名3;

                 ........

         };

        

 

         定义结构体变量: struct 结构体名 变量名; 构造类型(⾃定义类型)

         初始化: struct 结构体名 变量名 = {值};                 初始化可以部分初始化也可以全部初始化。

         使⽤结构体变量: 结构体变量是⼀个整体,包含多个成员的类型 需要单独对结构体变量中的成员进⾏操作

             方法:   结构体变量名.成员名 ------访问某个成员

         更改结构体中的某一个变量:

        方案:strcpy (目标地址,原地址)     含义:将源地址中的字符串复制到目标地址

        

         

#include<stdio.h>
#include<string.h>

//声明一个新类型
struct stu
{
	//定义一个字符数组用来保存学生的姓名
	char name[20];
	//定义一个浮点数来表示学生的年龄。
	float age;
	//定义一个整型来表示学生的性别。
	int sex;
};


int main()
{
	struct stu s1;	//定义结构体 stu 类型变量 s1
	//全部初始化
	struct stu s2 = {{'x','i','a','o','l','i'},20,1};
	struct stu s3 = {{"xiaozhang"},22,2};
	//部分初始化
	struct stu s4 = {.name = "xiaowang", .sex = 2};	//不初始化年龄,记得使用 . 隔开。

	printf("stu s1 age is %f\n",s1.age);			//单独访问。
	
	//更改某个变量的信息
	//方案:strcpy (目标地址,原地址)     含义:将源地址中的字符串复制到目标地址
	strcpy(s2.name,"xiaozhao");
	printf("s2.name is %s",s2.name);
	
}

         使⽤结构体指针访问变量内容:

                结构体指针: struct 结构体名 指针名;    结构体指针访问:指针名->成员名。 

 

        3,共用体

                概念:与结构体使⽤⽅式相同,表⽰含义也是相同,只是共⽤体是所有的成员 共⽤同⼀段内存空间

                定义:

        union 联合体名

                                                                {

数据类型1 成员名1;

数据类型1 成员名2;

.............................

                                                                };

        只是成员1,成员2,....共⽤⼀个空间,每个成员没有单独的空间,空间为 最⼤成员的空间能够整除在共⽤体中最⼤的类型

        在使⽤共⽤体时,同⼀时间只能使⽤⼀个成员,这个成员使⽤完,才能再使 ⽤其他成员

        4,枚举

        概念:有些类型的数据取值范围只能是固定的某些值,这种数据类型限制数据 的取值范围,把能够表⽰的值⼀⼀列举出来,这种类型的变量就只能从 列举的值中取值

        定义:

                                                enum 枚举名

                                                {

                                        成员1,//第⼀个成员默认是0,之后的成员是上⼀个成员的值+1

                                                 成员2,

                                                  成员3,

                                                };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值