1.C语言具有出色的可移植性,能够在多种不同体系结构的软/硬件平台上运 行。
2.c语言有简洁紧凑,使用灵活的语法机制,可以直接访问硬件。
3.c语言具有很高的运行效率。
①移植性:从一个平台切换到另一个平台,修改的地方越少,移植性越好。
②汇编与c语言差别:汇编可以直接访问硬件,c语言要编译过后,才能访问硬件。对硬件的初始化,通常用汇编。汇编语言是低级语言,复杂的程序很难编写,而c语言是高级语言,可以完成很多复杂的程序。
操作系统的内核都用c语言写的,内核给上层应用提供支持。
③面向结构特点:追求实现过程
面向对象特点:追求实现效果 优点:代码复用性,维护性,扩展性(不做任何变化)比较好
丹尼斯里奇: C语言之父
c语言的标准:K&RC ANSIC/C89标准 C99标准 C11标准
GNU C = C90 + GNU Extensions = C90 + (some features in C99 + some features in C11)
数据类型:数据集合的划分,不同数据类型的CPU的意义是不一样的
左右法则:首先从从未定义的标识符开始阅读,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
举例:int a;整型变量
int *a;整型指针变量
int **a;整型指针的指针变量
int a[10];整型数组
int *a[10];整型指针数组
int (*a)[10];整型数组指针变量
int (*a)(int);整型函数指针变量
int (*a[10])(int);整型函数指针数组(数组里面存放的都是指针,指针指向 的是整型函数的地址)
int num-5;
int *p=#
int **pp=&p;
指针变量p指向num:即p中保存的是num的地址
int *(*(*fp1)(int))[10];
函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组指针指向一个整型指针数组。
float(*(*b())[])();
函数,形参为空,该函数的返回值为数组指针了,该指针指向一个函数指针数组,该数组里的函数指向一个形参为空,返回值为float的函数。
int *(*(*arr[5])())();
函数指针数组,该函数指针指向一个无参的函数,返回值为函数指针,该指针指向一个函数指针,该函数的形参为空,返回值为int *
void *(*c)(char,int(*)());
函数指针变量,该指针指向函数形参为char和整型函数指针,返回值为void*
float(*(*e[10](int*))[5])
函数指针数组,该数组的元素指向一个形参为int*,返回值为float型指针的数组
(char*)强制类型转化
sizeof(int)=4
(short)=2
(long)=4
(float)=4
(double)=8
(char)=1
任何类型的指针都是4个字节
因为每个指针都保存的地址地址的长度都是固定的,所以指针都是4个字节
bit
字节=8位
半字=2个字节=16bit
字=4个字节=32bit
sizeof是运算符,不是函数
size of int错误
size of (int)正确
size of num正确
size of (num)正确
unsigned char:0-255
signed char:-128-127
正数的原码=补码
负数的补码等于原码取反加1
负数的原码等于补码取反加1
typedef使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于typedef关键字右边。
例如:typedef int size;
此声明定义了一个 int 的同义字,名字为 size。注意typedef并不创建新的类型。它仅仅为现有类型添加一个同义字。
你可以在任何需要 int 的上下文中使用 size:
typedef char Char;
typedef unsigned char Char;
vim typedef.h
typedef int Int;
有符号数和无符号数进行比较运算时(==,<,>,<=,>=),有符号数隐式转换成了无符号数
(即底层的补码不变,但是次数从有符号树变成了无符号数)
strlen 函数 sizeof 运算符