高级C+Linux编程基础


高级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

  • 1
  • 2
  • 下一页

相关内容