随笔分类 - C
摘要:编程工作的演进史 CPU需要的只是1和0组成的二进制数据 不管编程怎么变,最终编程得到的可执行二进制程序都是给CPU运行的。CPU需要的只是按照CPU设计时的规律(机器指令)排布的一串二进制1和0组成的数字(机器码),CPU根本不关心这些二进制是怎么来的。 这些二进制可能是一个很厉害的程序员直接用1
阅读全文
摘要:链表的引入 从数组的缺陷说起 数组有2个缺陷:一个是数组中所有元素的类型必须一致;第二个是数组的元素个数必须事先制定并且一旦指定之后不能更改。 如何解决数组的2个缺陷:数组的第一个缺陷靠结构体去解决。结构体允许其中的元素的类型不相同,因此解决了数组的第一个缺陷。所以说结构体是因为数组不能解决某些问题
阅读全文
摘要:操作系统究竟是个什么? 像人类社会一样的计算机软件系统(有些人只埋头干活,有些人只做管理) 人类社会最开始时人人都干活,这时候没有专业分工,所有人都直接做产生价值的工作。当时是合适的,因为当时生产力低下,人口稀少。这就像裸机程序一样(裸机程序的特点是:代码量小,功能简单、所有代码都和直接目的有关,没
阅读全文
摘要:概念解析 存储类 存储类就是存储类型,也就是描述C语言变量在何种地方存储。 内存有多种管理方法:栈、堆、数据段、bss段、.text段······一个变量的存储类属性就是描述这个变量存储在何种内存段中。 譬如:局部变量分配在栈上,所以它的存储类就是栈;显式初始化为非0的全局变量分配在数据段,显式初始
阅读全文
摘要:C语言预处理理论 由源码到可执行程序的过程 源码.c->(编译)->elf可执行程序 源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 源码.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序 源码.c->(预处理)->预处理过的.i源文件
阅读全文
摘要:程序中内存从哪里来 三种内存来源:栈(stack)、堆(heap)、数据区(.date); 栈(stack) 运行自动分配、自动回收,不需要程序员手工干预; 栈内存可以反复使用; 栈反复使用后,程序不会清理栈,因此,栈是脏的,使用时可能分配到原来保留的值; 函数不能返回栈变量的指针,因为这个空间是临
阅读全文
摘要:指针数组与数组指针 分析指针数组与数组指针的表达式一般规律:int *p;(p是一个指针); int p[5];(p是一个数组); (1) int *p[5]; (2) int (*p)[5]; (3) int *(p[5]); (1) int *p[5]; (2) int (*p)[5]; (3)
阅读全文
摘要:指针到底是什么 指针和变量的区别: 指针的实质就是变量,指针完整的名字应该叫指针变量,简称指针。 为什么需要指针: 指针是为了实现间接访问。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址; 间接访问(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能实现间接寻址,也决定了汇
阅读全文
摘要:常用位操作符 位与“&” 注意:位与符号是一个&,两个&&是逻辑与; 真值表:1&0=0 1&1=1 0&0=0 0&1=0 ; 从真值表可以看出:位与操作的特点是,只有1和1位于结果为1,其余全是0. 位与和逻辑与的区别:位与时两个操作数是按照二进制位彼次对应位相与的,逻辑与是两个操作数作为整体来
阅读全文
摘要:程序为什么需要内存 程序运行的目的: 程序运行是为了得到一定的结果,程序运行其实是在做一系列的数据计算,所以:程序=代码+数据; 程序运行是为了得到一定的结果,程序运行其实是在做一系列的数据计算,所以:程序=代码+数据; 程序运行的目的不外乎2个:过程、结果; 用函数来类比:函数的形参就相当于代加工
阅读全文
摘要:片段A: #include <stdio.h> int main(void) { unsigned short index = 0; unsigned short i = 0; for(i=0;i<index-1;i++) printf("%d\n",i); } 在for循环中index 为u_sh
阅读全文
浙公网安备 33010602011771号