一:数组
1,数组长度必须确定
2,初始化方式:
int a[5] = {1,2}; //部分初始化,其余默认为0 int a[] = {1,2,3,4,5};//元素确定,可以不指认长度默认长度为5
int a[] = {0}; //全部元素都默认为0
int a[3][4] = {1,2,3,4,5,5,66,7,7,88,,1,2};
int a[3][4] = {{1},{1,3},{2,5,6}};
结果
若将元素个数修改如下
结果
3,未初始化的局部变量为垃圾值
未初始化的全局变量为0值
4,sizeof() 是关键字,不是函数,用来计算数组所占字节数.
eg: int a[5]; length = sizeof(a)/sizeof(a[0]);
5, 数组的地址 a和&a
辨析:int array[3]
&array[0] 数组首元素地址,单位4字节
array 数组首行首地址,单位4字节
&array 数组的地址,单位为 3*4字节
二维数组
int a [4][3]
&a[0][0] 数组首元素地址,单位4字节
a[0] 数组首行首元素地址,单位4字节
&a[0] 数组首行的地址,单位12字节
a 数组首行的地址,单位12字节
&a 数组的地址,单位为 3*4*4字节
*和&可互相抵消
a[x] === *(a+x)
6,字符数组
strcat( str,ptr ) //将Ptr接到str后
strcpy( str,ptr) //将Ptr拷贝到str中,ptr 指向的字符串包括\0一起拷贝到str中。
strncpy( str,ptr,1) //只拷贝一个字符
strcmp(str,ptr) // 字符串比较函数
strncmp(str,ptr,1) //只比较一个字符
使用这些函数时,必须加上#include <string.h>
二,函数
1,函数调用
(1)形参个数要和实参个数对应
(2)形参类型要和实参类型对应
(3)形参名字和实参名字可以不对应
函数里面一旦遇到return,函数调用立马结束。
与return类似,在任何函数中遇到exit(), 整个程序终止。
2,函数调用过程
(1)通过函数名找到函数的入口地址(函数名就是地址)
(2)给形参分配空间
(3)传值(把实参传给形参)(值传递,地址传递)
(4)执行函数体
(5)返回
(6)释放空间(释放的是栈空间)
值传递为单向传递,形参与实参占用不同的内存
地址传递为双向传递,形参与实参占用相同的内存
3,变量的存储类型
register:寄存器存储变量,主要提高运行效率
&取地址, 取得是内存的地址,所以不能对寄存器变量取地址
extern:声明一个外部变量,程序将要用到但尚未定义的变量
static:定义
修饰全局变量,改变变量的作用域,只能在当前文件中被调用
修饰函数,改变函数的作用域,只能在当前文件中被调用