C历史:
1972-1973 年间,美国贝尔实验室为了描述和实现 UNIX 操作系统(一个具有强大影响力的操作系统,我们实验楼的实验环境 Linux 系统就是一种类 UNIX 系统),于是改良了 B 语言,这就是今天的大名鼎鼎的 C 语言。
C 语言相当灵活,用于执行几乎所有计算机可以完成的任务,既可以用于编写应用程序,还可用于编写操作系统,伟大的 Windows 和 Linux 操作系统的内核就是使用 C 语言开发的。C 语言包含了基本的编程元素,后来的很多语言(C++、Java 等)都参考了 C 语言,说 C 语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。
编译过程:
编译性语言比如 C 或 C++ 写的程序需要将源代码通过预处理-编译-汇编-链接后,生成计算机可执行的机器码语言(二进制代码,即0和1)。
预处理:展开#include头文件,宏替换、去掉注释、条件编译#if... ...
编译:检查语法,生成汇编语言(.s文件)
汇编:将汇编代码转换为机器码(.o文件)
链接:将各个模块的机器码文件、依赖库连起来生成计算机可执行的文件
数组:
int a[100];
a是数组名,也是个指针,指向首个元素a[0], 可以说是代表整个数组;sizeof(a)=400
&a是获取指针a的地址,不代表整个数组。sizeof(&a)=4
字符串常量:
1 char *p = "abcdef"; 2 3 int main() 4 { 5 printf("0x%p ",p);//指针变量存放的第一个字符的地址值 6 printf("0x%X,0x%X ","abcdef", &"abcdef");//字符串常量出现在表达式中, 本身代表它的第一个字符的存放地址 7 printf("%s ",p);//以字符串打印p指针变量,则打印这个字符串存放地址处的字符串 8 printf("%c%c%c%c%c%c ",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5));//指针所指向的 内存的数据 9 printf("%x ",&p);//指针变量本身的地址 10 }
② 32位编译器的指针变量为4个字节(32位),64位编译器的指针变量为8个字节(64位)。在32位编译器下,使用%p打印指针变量,则会显示32位的地址(16进制的);在64位编译器下,使用%p打印指针变量,则会显示64位的地址(16进制的),左边空缺的会补0。
③ %x、%X和%p的相同点都是16进制,不同点是%p按编译器位数长短(32位/64位)输出地址,不够的补零