Java培训、Android培训、iOS培训、.Net培训、期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)枚举 1)枚举类型的定义 枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。 一般形式为:enum 枚举名 {枚举元素1,枚举元素2,……}; 2)枚举变量的定义 ①先定义枚举类型,再定义枚举变量 ②定义枚举类型时同时定义枚举变量 ③省去枚举名称,直接定义枚举变量 1 enum Sex { Man, Woman, Unkown}; (二)宏定义 1)不带参数的宏定义 一般形式: #define 宏名 字符串 比如#define ABC 10 定义时需要注意: 1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 2> 对程序中用双引号扩起来的字符串内的字符,不进行宏的替换操作。 3>宏名的有效范围是从定义位置到文件结束。如果需要终止宏定义的作用域,可以用#undef命令 2)作用 其实和#include差不多,是把源程序中所有"宏名"替换成右边的"字符串" #include <stdio.h> int main() { char *name = "COUNT"; printf("%s\n", name); #define COUNT 4 int ages[COUNT] = {1, 2, 67, 89}; for ( int i = 0; i<COUNT; i++) { printf("%d\n", ages[i]); } // 从这行开始,COUNT这个宏就失效 #undef COUNT int a = COUNT; return 0; } 2)带参数的宏定义 一般形式: #define 宏名(参数列表) 字符串 在编译预处理时,将源程序中所有宏名替换成字符串,并且将 字符串中的参数 用 宏名右边参数列表 中的参数替换 带参数的宏定义效率比函数高 1>使用注意: ① 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串 ② 带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。计算结果最好也用括号括起来 #include <stdio.h> #define pingfang(a) ((a)*(a)) int main() { int c = pingfang(5+5)/pingfang(2); printf("c is %d\n", c); return 0; } (三)自定义 typedef 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 使用场合: ①基本数据类型 ② 指针 ③结构体 ④枚举 ⑤ 指向函数的指针 typedef struct { int age; } MyStu; typedef enum { Man, Woman } MySex; typedef int (*MyPoint)(int, int); typedef struct Person { int age; } * PersonPoint; (四)static和exterm 1)对函数的作用 外部函数:定义的函数能被本文件和其他文件访问 1> 默认情况下所有函数都是外部函数 2> 不允许有同名的外部函数 内部函数:定义的函数只能被本文件访问,其他文件不能访问 1> 允许不同文件中有同名的内部函数 static对函数的作用: 1> 定义一个内部函数 2> 声明一个内部函数 extern对函数的作用: 1> 完整地定义一个外部函数 2> 完整地声明一个外部函数 (extern可以省略,默认情况下声明和定义的函数都是外部函数) 2)对变量的作用 1>对局部变量 static修饰局部变量的使用场合: 1.如果某个函数的调用频率特别高 2.这个函数内部的某个变量值是固定不变的 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁 并没有改变局部变量的作用域 总结来说: 1.extern可以用来声明一个全局变量,但是不能用来定义变量 2.默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量 3.如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
|
|