
c语言学习笔记
Tinelines
这个作者很懒,什么都没留下…
展开
-
c语言学习笔记-关键字
auto 定义变量为局部变量,在函数中定义变量时默认为auto static 定义静态局部变量,使用static修饰的变量将被放置到数据段 定义函数类型,被static修饰的函数只能被本文件内的函数调用 register 告知编译器将尽可能变量存放到寄存器中,linux中就有一个变量被此关键字修饰-gd,被此关键字修饰的变量不一定能被放进 extern 外部声明,作用是告知编译器该变量、函数已经在别的文件中被定义了,类似于汇编中的EXPORT typedef restrict ..原创 2021-03-19 23:37:03 · 143 阅读 · 0 评论 -
c语言学习笔记-内存管理-linux的内存映像
程序在内存中的存储形式 程序存储在flash中 程序在内存中主要分为以下几段:代码段,数据段,只读数据段,bss段,堆,栈,文件映射区,内核映射区(操作系统内核) 程序一般存放在代码段,在linux中又称为文本段 数据段存放的一般是静态变量和被初始化为非零值的全局变量 bss段存放的是被初始化为零的全局变量和未被初始化的全局变量 有些添加了const的变量会被放到只读数据段(rom中,具体视编译器决定) 文件映像区,系统会将线程需要的文件从外存中加载到文件映像区,例如在加载word时,如果改动后不保存,..原创 2021-03-16 22:42:51 · 122 阅读 · 0 评论 -
c语言学习笔记-静态库与动态库
函数库实质上就是没有经过链接的二进制文件,是开发人员编写的实现特定功能的多个函数 一般函数库会包括两种格式的文件.a/.so 和.h 编译后已经转化为二进制文件,将库添加到工程中,在 静态库类型为.a 动态库类型为.so 静态库和动态库都属于函数库,两者的区别在于,当使用静态库时,调用库内函数时,编译器会从库中找到该函数并将其链接到调用的位置,在使用动态库时,当使用库内函数时,编译器会从库中找到函数然后连接到代码段的某一块位置,调用处会跳转到加载的哪一处运行 字符串库以及数学库 //自己实现me..原创 2021-03-13 15:51:55 · 251 阅读 · 1 评论 -
c语言学习笔记-字符串
c语言中的字符串 c语言中没有字符串类型,所以c中的字符串均是通过指针或数组使用的,在数组中字符串是以字符的形式存储的,字符串的内容在编写程序时是定好的,存储在内存的代码段, 字符串的起始和结束 通过指针访问,以\0结束,\0并不属于字符串内容,仅作为结束符使用 ‘\0’ ‘0’ 和 0 文本格式和二进制格式 \为转译字符,作用是将?文本格式转换为二进制编码格式 所以’\0’和0是相同的,在内存中都是以二进制存储的0 '0’是文本格式的0,是以二进制存储的48 ...原创 2021-02-27 21:41:14 · 169 阅读 · 0 评论 -
c语言学习笔记-函数
函数的实质 函数实质上就是一段能完成特定功能的程序,这段代码是连续的,起始地址由函数名给出 为什么要发明函数 c语言是一种高级语言,已经有了程序模块化的雏形,通过函数,可以完成指定的功能,只要这个函数不涉及到全局变量和硬件相关,都是只要复制粘贴即可使用的 函数的使用方式 使用函数有三要素,声明,定义和调用 函数声明,是指将函数原型放在调用前的做法,目的是为了让编译器知道有这个函数,在函数进行编译的过程中,编译器的声明记录表会将遇到的函数声明都记录下来,这样在函数调用的时候,就在表中查询是否存在此函数,如果.原创 2021-02-27 21:26:34 · 197 阅读 · 0 评论 -
c语言学习笔记-预处理
编译的几个阶段 我们平时使用的编译器,其实准确来讲应该叫编译工具链,因为其中包括了不止一种编译器,他们之间相互衔接,完成将程序转化为二进制代码的功能 主要分为4个阶段,预处理 .c 汇编.s 编译.o 链接 四个过程 预处理指令 #include ,#if,#end,#define 都是预处理指令 预处理作为编译的第一个阶段,其作用是将文件中的包含指令添加到文件中 宏定义 ...原创 2021-02-26 23:12:25 · 117 阅读 · 0 评论 -
c语言学习笔记-共用体,大小端,和枚举
共用体是c中的一种数据结构,他的定义方法和使用方法与结构体相同,只需要在定义类型时将struct换为union即可 与结构体不同的是,联合体中的内存空间是所有成员共用的,公用体的大小取决于共用体中最大的成员大小,共有体没有对齐机制,即使当联合体最大成员大小不足4字节的倍数,编译器也不会自动填充对齐 使用联合体一般只是为了方便开发者阅读,其成员类型代表了将会以何种方式解析这段内存数据,同样的使用强制类型转换也可以做到 ...原创 2021-02-24 20:30:19 · 178 阅读 · 0 评论 -
C语言学习笔记-结构体和内存对齐
结构体是一种数据结构,其特点是可以包含多种类型的成员, 结构体的数据对齐 在结构体内,不是每个成员都只占其自身类型大小的,原因是结构体为保证运行效率原创 2021-02-22 17:49:40 · 289 阅读 · 0 评论 -
c语言学习笔记-内存02
栈 特性 1. 自动分配 2. 脏内存 3. 反复使用 4. 临时性 堆 在有操作系统的平台上面,堆由对内存管理器管理 特性 主动申请 脏内存 需要释放 临时性 大块内存 使用流程 申请-检查是否申请成功-存入数据-释放 使用这段内存空间前,最好先用memset将内存清一下零再使用 在使用堆内存的过程中,一定不要丢掉申请的内存指针,否则这块内存得不到释放,就会发生内存泄漏 堆中的内存是按块分配的,在gcc中,最小可申请的空间是16字节,而且在c语言中,越界使用堆内存是不会报错的,除非申请的空间超过.原创 2021-02-13 18:18:53 · 145 阅读 · 0 评论 -
c语言学习笔记-二重指针与二维数组
二重指针 二重指针本质上也是指针变量,其占用空间大小也为4个字节,只是指向的对象必须是一重指针,这种特性是由编译器决定的,以避免出现错误使用而不自知的情况,并减少开发者辨识的复杂度 二重指针经常用于传参中,改变一重指针的指向地址 二维数组 二维数组从内存上来看,与同等大小的一维数组没有什么区别 二维数组由n个一维元素构成,而一维元素又由j个二维元素构成 例如a[2][5] 救赎由两个元素构成,这两个元素每个都包括5个元素 二维数组的指针表示方法 了解了上面二维数组构成,就可以对照一维数组的方.原创 2021-02-13 10:14:17 · 582 阅读 · 1 评论 -
c语言学习笔记-指针02
变量定义的判断方法 优先级最高的运算符 . -> () [] int *p[5]; / int (p)[5]; / int (p[5]); 由于[] 的优先级要高于 所以第一个和第三个都是指针数组,第二个由于使用了小括号,变量先与结合,所以该类型是数组指针,即指向一个有五个int型元素的数组的指针 int (*p)(void); / int *p(void); / int (p[5])(void) / int ((*p)[5])(void) 第一二个可以明显看出都是函数指针,第三个是一个函数指针..原创 2021-02-12 17:45:41 · 146 阅读 · 0 评论 -
C语言学习笔记-指针
指针的实质就是变量 普通变量中存储的是各种类型的数据,指针变量中存储的是指向变量的地址,普通变量通过内存地址进行访问并改写内存中的数据, 指针的目的是实现间接访问,就是实现CPU的间接寻址 使用指针的三个步骤,声明,关联变量,解引用 左值与右值,左值代表内存空间,右值代表值 ...原创 2021-02-10 23:06:11 · 227 阅读 · 0 评论 -
C pime plus《字符串与字符串函数》学习总结
字符串的声明形式 数组char p[]={“Hello”};或char p[6]={‘H’,‘e’,‘l’,‘l’,‘o’,’\0’}; 指针 char* p=“Hello”; 字符串的特点 使用指针声明字符串时,字符串存放于程序的代码段,且为只读形式,所有指向该字符串的指针的地址都相同 ...原创 2021-01-21 15:06:08 · 124 阅读 · 0 评论