@【C】浙江大学程序设计入门——C语言数组与函数【六】
数组
定义数组
<类型> 变量名称[元素数量];
int grades[100];
double weight[20];
元素数量必须是整数
C99之前: 元素数量必须是编译时刻确定的字面量(不能是变量)
数组是一种容器(放东西的东西)。特点是:
- 其中所有的元素具有相同的数据类型
- 一旦创建,不能改变大小
- *(数组中的元素在内存中是连续依次排列的)
数组的单元
数组的每一个单元就是数组类型的一个变量
使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数(从C语言开始 才是从0开始的)
有效的下标范围
编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做都或者写
一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
- segmentation fault
要保证不越界
可以创建长度为0的数组,无意义,会超过有效范围
函数
函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值
函数名(参数值);
()起到了表示函数调用的作用,没有参数也需要()
如果有参数,需要给出正确的数量和顺序
这些值会按照顺序依次初始化函数中的参数
return停止函数的执行,并送回一个值
return;
return 表达式
一个函数可以出现多个return语句,最好要单一出口,尽量别用
函数返回值可以传给变量,也可以再传给函数,也可以丢掉
没有返回值函数
void 函数名(参数表)
不能使用带值的return 可以没有return
函数先后关系
C的编译器自上而下顺序分析你的代码
可以在开头 声明函数,告诉编译器
声明和其后的定义应当相同
调用函数
C语言在调用函数的时候,只是传值给参数
每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
过去,对于函数参数表中的参数,叫形参,调用时的值叫实参
但是 传的是值 而不是变量
本地变量
函数每次运行,就产生独立的变量空间,这个空间中的变量是函数这次运行独有的,称为本地变量
函数内定义的变量是本地
函数参数也是本地
生存期:什么时候这个变量开始出现,到什么时候消亡
作用域:在代码的什么范围内可以访问这个变量(这个变量可以起作用)
对于本地变量 这两个问题都是在大括号
本地变量的规则:
本地变量是定义在块内的(大括号内,出了他所定义的块就没有了)
在块外定义的变量,在块内仍然存在,在块内定义的同名变量会覆盖外面,出了块以后,块外的同名会恢复
不能在同一个块定义同名变量
本地变量不会被默认初始化
参数在进入函数时会默认初始化
杂事
void f() 在传统C中,代表参数未知
void f(void) 直接声明无参数
C语言不允许函数嵌套定义
二维数组
int a[3][5]
三行五列
a[i][j]是一个int
a[i,j] =a[j]
int a[][5]={}
列数必须给出,行数可以由编译器来数