函数传值
函数传值传递的只是实参的值,相当于拷贝了实参的值传递给形参变量,想当于赋值操作,无法实现被调函数对主调函数中数据的修改。
一维数组作为函数参数
情况1.数组元素作为函数参数
形式上,保持一致,被调函数中就可以访问到主调函数中数组的数据
一维整型数组作为函数参数
形参 写成数组的形式 同时需要一个接受数组长度的形参
实参 传数组名,传数组长度
为什么要传len(数组长度) --为数组开辟多大空间做准备 fun(int*a[ ])本质上是指针 此时a在64位占了8个字节;
数组的下标运算 本质上是一个指针运算
函数参数分为: 形参变量 实际参数
注意: 数组元素的类型是否与形参类型一致
形参和实参规则
1.个数相同
2.类型匹配
3.一一对应
情况2.想把整个数组传入到函数中
数组名能代表整个数组 //给实参时,给定数组名
void printArray(int a[],int len);
形式上:
形参1 表示要传的是数组这种数据
形参2 要传的是数组的长度
本质上:
void printArray(int* a,int len);
指针变量 (接收地址这种数据)
因为传的是数组名,而数组名是数组首元素的地址,所以相当于将数组空间的地址传给了被调函数,而被调函数,通过数组下标运算,可直接访问到主调函数对应数组空间的数据。
所以,数组传参的这种方式,可以实现被调函数修改主调函数中的数据。
注意:
1.如果函数传的是数组,通过数组下标的访问方式,可以实现被调函数,修改主调函数中的数据
二维数组作为函数参数
形参
1.写一个二维数组的形式(行数可以省略,列数不能省略)
2.需要传递行数
实参
1.传数组名
2.传二维数组行数
二维字符型数组作为函数参数,语法与二维整型数组类
标识符的作用域与可见性问题
作用域:标识符起作用的范围
局部作用域--{}内的都是局部作用域 全局作用域--不在任何一个{}范围内
可见性: 程序运行到某句代码时,那些标识符是可见的(可起作用的)
标识符可见性的规则
1.先定义,后使用
2.同一作用域中,不能有同名标识符//重复定义
3.在不同作用域,同名标识符,相互之间没有影响
4.如果是不同作用域中,但是作用域之间存在嵌套关系,则内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。