随笔分类 - C
摘要:一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。 C语言编写的程序经过编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储区域: 1.代码段(Code或Text) 代码段由程序中执行的机器代码组成。在C语言中,程序语句进行编译后,形成机器代码。在执行程序的过程中,CPU的程序计数器指向代码段的每一条机器代码,并由处理器依次运...
阅读全文
摘要:typedef是一种特殊的声明方式,不过它与普通声明的含义大不相同。普通声明的主角是“变量”,它或是创建一个新变量或是对外文件变量使用前的声明;而typedef声明的主角则是“类型”,通过这个声明对一种数据类型引入新的名字。从引入新名字这个角度来说,typedef声明又和宏定义有些相似:用新名字代替已有的名字。接下来的叙述会看到这两者之间的区别。typedef是特殊的 正如一开始所说的那样,typedef是特殊的声明。最常见以及常用的方式如下:1 /* 代码段1 */2 struct stuinfo3 {4 char id[20];5 char name[20];6 ...
阅读全文
摘要:看结构体和共用体部分的时候,遇到了一个新名词“内存对齐”。先引入问题。如下:1 struct student2 {3 char name[20];4 int age;5 char sex;6 char phone[15];7 };8 struct student p1; sizeof(p1)=? 这个很简单得出答案,即20+4+1+15=40Byte。如果将phone[15]改为phone[16],结果是44。难道不是41吗? 这里便要引入内存对齐的概念。内存为了提高访问效率,规定以结构体中最大的基本单位长度为对齐标准。即实际分配的内存大小是对...
阅读全文