C语言进阶--字符串函数和结构体的进阶以及动态内存管理

字符串相关的函数有strlen,strcpy,strcmp,strcat,除此之外还有字符相关的函数,比如大写变小写,判断某一个字符是否为字母字符等,还有内存函数memcpy,memmove,memcmp

结构体的进阶:结构体的声明、结构体变量的创建、结构体的传参这些都是基础的,结构体的大小计算比较重要,分四步走,首先写出0偏移量的位置,第二步按照每个变量类型的大小和默认对齐数(vs默认是8)的最小值的倍数处放入,第三步结构体的总大小是所有变量中最大变量的字节的倍数,若有结构体的嵌套,则嵌套的结构体应放在它自身的最大变量的倍数处,并且最终结构体的大小是所有结构体的所有变量中最大变量的倍数。然后是枚举和联合,用到的不多暂时不深入研究。

动态内存管理:malloc,free,realloc,palloc

malloc返回值是void*,因此我们在用一个指针变量接收时必须要强制类型转换,我们一定要想清楚创建多少字节的空间,创造的空间用来存储什么类型的变量,结构体类型也好,int类型也好都是一样的。malloc还可能申请不成功,因此在使用malloc后要判断用来接受的那个指针是否为空。

free,malloc后一定要进行free操作,否则会造成空间浪费,并且free后一定要将接收malloc返回值的变量也置空NULL。若free的参数我们给的是NULL,则什么都不干。

palloc比malloc多一个初始化的作用,会将所有的字节都初始化为0x00,而且参数和malloc也有点不同,palloc的参数是元素个数和元素的大小。

realloc是在之前申请的空间不够用的时候重新申请空间,参数有两个,之前的地址和新申请的总内存的大小,有两种情况,一种是后面的空间够用,另一种是后面的空间不够用,因此realloc的返回值与之前的地址不一定是同一个,而且可能申请失败,申请失败会返回NULL,因此我们最好新创建一个指针变量用来接收新返回的地址,避免用原指针去接收,接收后得到一个NULL且之前的地址找不到的情况发生。

c语言就是一个工具,方便我们将实际生活中的问题转化为抽象的数据之间的关系,其中循环语句、选择语句、数组、字符和字符串、数据类型、变量和常量、操作符、结构体、数据在内存中的存储、指针等等,这都是最基础的语法,必须要记住理解的东西。后面会开启数据结构的复习,这是数据存入(如何省空间,如何省时间),如何将实际问题抽象化为数据的逻辑结构,用什么样的物理结构来存储这个逻辑结构,以及实际的操作等。

你可能感兴趣的:(c语言,开发语言)