函数
for(表达式1, 表达式2, 表达式3)
表达式1:初始条件
表达式2:结束条件
表达式3:执行语句
逗号语句(,)
表达式1,表达式2 : 运行先1后2,但是,有1的过程,结果显示是表达式2 的结果
break
只能出现在循环和switch语句中
最长的循环放在最内层
子函数
1.通过函数名找到函数入口地址
2.给形参分配空间
3.传值
4.执行函数体
5.返回
6.释放空间
注:return 以下所有代码不执行
寄存器 register int a;(寄存器内):提高效率,不能取地址
extern 声明外部变量 (声明不需要内存,定义需要内存)
static作用
1.修饰全局变量,改变其作用域,只能在本文件使用
2.修饰函数,改变其作用域,只能在本文件中调用
3.修饰局部变量,改变变量的生命周期,直到程序运行结束,变量才会被释放
#if 0 ... #enfif:注释,开头是#,在预处理过程就执行
<stdio.h> :库函数的文件
'stdio.h' :当前目录下寻找,用于自定义头文件
数组
float mark[100]
mark[0 ]:低地址
a 与 &a 的指相同
a 首元素地址
&a 数组的地址
a + 1 下一个元素(+4)
&a + 1 下一个数组(+16)
二维数组
a[3][4] (三行四列),要先进行初始化
int a[3][4] = {{1, 2, 3, 4} , {2, 3, 4, 5}, {3, 4, 5, 6}};
%p:显示地址
* == [ ] a[0] == *(a + 0)
a: 首行地址 +1 加一行
&a:数组的地址 +1 加一个数组
a[0]:数组首行元素的地址 +1 加一个元素
a[3][4] 以下哪个不能表示a[1][1]
*(a[1] + 1) == *(&a[1][0] + 1)
*(&a[1][1]) => a[1][1]
(*(a + 1)[1]) => a[1][1]
*(a + 5) => a[5]
求个数
printf( "%d\n", sizeof(a) / sizeof(a[0]));
字符串后有\0
‘hello’:一共有6 个字符
strcat:连接
strncat(ptr, &ch, 1); <=> ptr[num - 1] = ch;
strcpy:覆盖(\n 也会跟着覆盖)
strncpy:覆盖指定个数 :strncpy (str, ptr, 5)