(c primer plus第五版)学习笔记
第一章概览
C是一种编译型的语言
编译型:就是把c语言编译成计算机能运行的机器代码
不同的计算机系统有着各自的编译器,来把c编译成对应的机器代码
特性:代码高效,可移植,功能强大和灵活
缺点:代码格式自由(特别是指针的使用)
C语言运行的七个步骤:
1. 定义程序功能
2. 设计程序
3. 编写代码
4. 编译成机器代码
5. 运行
6. 调试
7. 维护修改
第一和第二个步骤对于大的程序作用是很大的,不要忽略这两个步骤,把这两个步骤当成一种习惯,无论程序的大小。
目标代码文件、可执行文件和库
C程序从源代码变成可执行文件(机器代码)需要两个步骤:
1. 编译:编译器将源代码转为中间代码(目标代码)
2. 链接:链接器将中间代码(目标代码)与其他代码(启动代码start-up code和库文件)结合生成可执行文件
相关文档:
[注]:最近在做UVC描述符的编辑工具,用到很多的结构,为了方便把结构体写成bin文件,需要把结构体中填充的字节去掉,在网上搜索得到这篇文章,感觉挺好的,转过来做个纪念。
结构体(struct)的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。先看下面定义的两个结构体.
struct
......
题记:
所有的完美,都是在崩溃的一刻达到的!
我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。
首先,需要搞清楚:变量的类型和它的存储类别是两个概念。
数据类型和内存管理没有直接的关系。
一个由c/C++编 ......
这是入门篇中提到的那两题:
int * (* (*fp1) (int) ) [10];
int *( *( *arr[5])())();
解答如下
1.int * (* (*fp1) (int) ) [10];
从外往内进行分析
a.typedef P=(* (*fp1) (int) ),那么原声明改写为 int*P[10],这是一个有10个元素的数组,每个元素都是一个指向整型数的指针
b.typedef Q=(*fp1),那么P改写为 *Q( ......
C字符串长度定义规范
(转载请注明来源于金庆的专栏)
因为总是见到C字符串长度相关的错误, 所有定个规范出来, 有利于减少错误.
关键在于C字符串有个结尾0, 处理时需要注意.
定义字符串长度有两种方式, 一种是用字符串的大小, 一种是字符串的长度.
字符串的大小即内存空间的大小, 而串长度加1才是所需空间.   ......