第六章引用数组处理批量数据
1、数组的定义 :类型符 数组名[常量表达式]
1) 在主函数中定义数组,常量表达式不能包含变量
int a[3+5]; //合法int n;int a[n]; //不合法
2)在被调用的函数中,其长度可以是变量或非常量表达式
void func( int n){ int a[2*n]; //合法,因在执行函数时n的值是不变的}
3)在C语言中数组名代表该数组的起始地址,scanf函数中的输入项如果是字符数组,不要再加地址符&
2、数组的初始化
如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把他们初始化
为0(如果是字符型数组,则初始化为'\0',如果是指针型数组,则初始化为NULL(空指针))
int a[10] = { 1,2,3,4,5}; //只初始化前五个元素,后五个元素为0
3、二维数组的初始化
int a[3][4] = { { 1},{ 5},{ 9}}; /*赋值后元素为 1 0 0 0 5 0 0 0 9 0 0 0*/
int a[3][4] ; //定义一个三行四列的数组a[3][4] = 3; //不合法,数组从0开始,不存在a[3][4]
4、用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素地址传递给形参数组,这样两个数组就共占同一段内存单元。如果实参数组为a,形参数组为b,若a的首元素地址为1000,则b的首元素地址也是1000。显然如果改变了b[0]的值,也就意味着a[0]的值也改变了。即形参数组中个元素的值如发生改变会使时常数组元素的值同时发生改变。
对多维数组,形参数组的第1堆大小可以忽略,第二堆大小不能忽略,而且要和实参数组的第二维大小相同
int score[5][10] ; //实参数组定义int array[][10] ; //正确形参定义int array[8][10] ; //正确形参定义int array[5][] ; //错误形参定义int array[][] ; //错误形参定义
第七章 用函数实现模块化程序设计
1、静态局部变量使在编译时赋初值的,即只赋初值一次,在程序运行时它已经有了初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
2、如果定义静态局部变量时没有赋初值,编译时会自动赋初值0
定义自动变量没有赋初值,它的值是一个不确定的值。