1.变量命名规则
字母、数字、下划线的组合
开头必须是字母 or 下划线,不能是数字
为了方便区分标识符和常量,从而便于编译器编译
2.变量的声明&定义
声明:向编译器介绍名字,相当于告诉编译器它长什么样子
定义:表示“在这里创建函数、变量”
3.static
①修饰局部变量,编译器会对此变量初始化为0,放在全局数据区
和普通局部变量的不同:编译器一般不对局部变量进行初始化,除非对其显式赋值,局部变量放在栈空间,使用完会立即释放
②修饰全局变量,编译器对此初始化为0,放在全局数据区,仅对当前文件可见,其他文件可以定义同名变量,两者互不影响
和普通局部变量的不同:对整个工程可见,其他文件可以使用extern外部声明后直接使用,其他文件不能定义同名变量
③修饰函数,只能在声明它的文件中可见,其他文件不能引用该函数,不同文件可以使用同名静态函数,互不影响
4.static inline
①inline是向编译器建议
②被inline修饰的函数以内联的方式嵌入到调用这个函数的地方
③编译器会判断这样做是否合适,并最终决定是否这么做
①inline只用于内容重复,代码很短的函数,因为这种函数的出栈入栈跳转相对函数本身代码运行时间的比例较大
②对于复杂函数,不建议使用inline,因为在每个调用位置都会复制编译,会让代码变得很长
③内联展开节省的是每次调用函数的开销
【static作用参考前面修饰函数时的作用,其实是维护代码的健壮性】
5.const
①使用const定义的变量的值是不允许修改的,
②相当于定义只读变量,所以必须在定义的时候赋初值
int *const a //常量指针,a指向int类型变量,变量值可以修改
int const *a = const int *p //指向常量的指针,a指向的这个变量是const类型,不能修改,但是a本身的值是可以改变的;
6.#define
①define是预编译指令,它定义的宏是在预处理阶段展开的
const定义的只读变量不同:const定义在编译运行阶段使用的
const定义的是变量,define定义的是常量
②define定义的宏在编译阶段不占用内存,因为它不是变量,系统只会给变量分配内存
③define可以定义函数
7.typedef
不知道函数返回什么类型,可以用typeof()定义一个用于接受该函数返回值的变量
typeof(get_phone_info()) data;
data = get_phone_info()
8.sizeof
①单目运算符,参数可以是指针、数组、函数等;
②返回值类型unsigned int,表示操作数所占空间字节数大小
③数组的大小:sizeof(数组名)/sizeof(数据类型)
char a[5] = "123"
int b = sizeof(a); //b=5
int b = strlen(a); //b=3
9.strlen
函数,计算字符串长度;参数必须是char型;
`\0`作为终止符
10.main
int main (int argc, int *argv[])
argc :argument count,表示传入main函数的参数个数
argv : argument vector,表示传入main函数的参数序列或指针,且第一个参数argv[0]一定是程序的名称,并包含程序所在的完整路径
11.continue & break 区别
①.控制循环结构,主要作用是停止循环
②.break:跳出一个循环或者完全结束一个循环,只能在循环体和switch语句中使用
③.跳过本次循环体中剩下的尚未执行的语句,立即进行下一个循环条件判定
12.字符串
①C语言中没有字符串这种类型,可以通过char数组来代替
②字符串一定是个char数组,但char数组未必是字符串
③\0结尾的数组就是字符串
如果没有结尾那就不是字符串,只是普通的字符数组
\0 叫做结束标识符,且这个标识符不算做字符内容
%s,打印字符串,接收字符串结束标志\0之前的所有字符
%c,打印字符
char *message = "Hello World!";
printf("%s\n",message);
while(*message != '\0')
printf("%c ",*message++);
13.##运算符
用于把参数连接到一起,预处理程序把出现在##两侧的参数合并成一个符号
14.assert
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行
已放弃使用assert()的原因是:
频繁的调用会极大的影响程序的性能,增加额外的开销
Other:
1.平均数、中位数、众数的概念
平均数:xxx
中位数:一组数据的中间值;奇数个数就是中间位置的值;偶数个数就是中间两个值的平均值
众数:一组数据中出现次数最多的值
偏态分布导致平均数无法描述整体样本的情况。
中位数是一个很常见的用来弥补平均数在偏态分布中不足之处的,很好用的统计量
2.比较器
A - b
返回负数的时候,第一个参数排前面
返回正数,第二个参数排前面
返回0时,无所谓
可以很好的应用在特殊标准的排序上