用一个字符串代替一个数据

1.为了让一些数据更有意义。(一般都是默认k开头)

#define kout -1

2。简洁代码,类似于内敛函数的意思,使用简便。

#define kadd(a,b)  ((a)+(b))----参数和整体都要加括号,不然会有歧义 涉及优先级问题

3.调试开关,输出日志的开关.

#if 0 

#define Debug(X) printf("%s\n")

#else

#define Debug(x)

#endif

 

枚举enum

 typedef enum{

....

}kAnimalCategory;

 

宏定义与enum区别

宏定义是一个值或表达式,不是类型,仅仅是给一个表达式取个别名。枚举是一个类型,可以定义枚举类型的一个变量。

自动分配内存--当定义以基本类型的变量的时候,系统会为这个变量自动分配内存,这个内存在堆上,当作用域结束,系统会将这个内存回收。

动态分配内存----开发人员自己像系统申请的内存空间,申请的内存位于栈上,当作用域结束之后,系统是不会自动回收内存,是由开发人员自己去释放,如果不释放,就内存泄露了。

1.什么时候需要动态分配内存?----程序运行过程中,需要保存、记录相应的数据,但是有没有提前准备好内存,那么就需要临时动态内存的分配。

void malloc(size_t);-------size_t 希望申请的内存空间(单位byte)

void 系统一开始不知道你要存的数据类型,不同的数据需要的内存空间不同,所以默认就是void*类型,泛指所有指针类型(char *,int*,struct*),使用时自动转化为需要的类型,如果分配空间失败,返回null。

 首次分配内存必须用malloc 

释放内存free(void*)

注意--free里面的参数必须是指针,这个指针指向的内存必须是动态分配的。

 

计算结构体内存空间

原理--如果结构体内有多中数据类型,那么以占据内存字节数最高的类型对齐。

 typedef struct{

char *name;

int age;

}Person;----16

char *8字节,int  4字节  所以age 变量自动像name对齐,整个占据16字节.

 typedef struct{

char name;

int age;

}Person;----8

 

 typedef struct{

char name[6];

int age;

}Person;----12

 

posted @ 2015-12-14 16:52  蜗牛才是大牛  阅读(195)  评论(0编辑  收藏  举报