高级C+Linux编程基础
指针&指针数组
强制类型转换 int *p;*(char *)p;
int *p1,*p2; int a[3]={1,2,3};
p=a;
a[0]-->1 *p-->1 p[0]
a[1]-->*(p+1)-->p[1]
*(a+1) a可理解为存储了本身地址的指针 *(a+1) ---> *(5640+4) 5640假定为一地址.
结构体&共用体
typedef struct A typedef作用:封装一结构体给其它程序使用. struct A
{ {
int a:6; 虽int型,但变量a只存6位,即占空间6位 char a;
int b; char unused[3];
char c; int b;
}; 由于内存对齐(节省寻址时间)原理,些结构体占8个bytes };
左侧的示例严格控制内存分配,防止编译时内存访问出错,让结构体更为紧凑...
函数指针
int fun(int,int); 声明一符号,两个int参数,一个int返回值..
int(*pfun)(int,int); 函数指针..
pfun=fun;
pfun(a,b); 函数指针可指向多个函数 指针的灵活性
Makefile入门
Hello World !
gcc -c hello.c --->hello.o 编译compile
gcc -o hello hello.o ld(GNU linker连接器)过程 .o文件用于生成 .a .so
gcc -o hello hello.c
预编译:程序前面的#开头的部分.
编译:程序的纯C代码..
Make 常用工具,Makefile 三部分组成..
规则(可理解为目标) 依赖 动作
范例:
EXEC=hello
all:$(EXEC).o
all下如果无动作留空
$(EXEC):$(EXEC).o
gcc -o $@ $< 注:前有一TAB格,$@ --- 指同一段的目标名
.c.o:
gcc -c $< $< --- 指一段的依赖名
clean:
rm -f $(EXEC) *.c