一、函数和一维字符型数组
传参:
char 数组名[100];
定义:
返回值 函数名(char 数组名[])
{
函数体;
}
调用:函数名(数组名);
void print_str(char str[])
{
}
print_str(str);
注意:
1. 一维字符型数组作为函数参数传递时,只需要传递数组即可,不需要传递长度,因为字符型型数组保存的字符串,末尾有'\\0'结束标志。
2. 数组作为函数参数传递时,本质传递的是数组的首元素地址(在被调函数中:sizeof(数组名形参)—本质求地址在计算机内存中的大小)。
二、函数和二维整形数组
传参:
定义:
返回值 函数名(int 数组名[][列数],int 行数)
{
}
调用:函数名(数组名,行数)
int a[3][4] = {0};
void print_2D_array(int a[][4], int hang)
{
}
printf_2D_array(a, sizeof(a)/sizeof(a[0]));
注意:
1. 二维整形数组传参时,形参必须说明是二维数组,行数可以省略,列数不能省略。
形参:int a[][列数]
2. 在自定义的函数中,行数无法计算,所以可以通过参数的方式传递
3. 在自定义的函数中,列数可以计算:sizeof(a[0]) / sizeof(a[0][0])
三、函数和二维字符型数组
传参:
定义:
返回值 函数名(char 数组名[][列数], int 行数)
{}
调用:函数名(数组名, 行数);
char str[3][100] = {0};
void print_2DC_array(char str[][100], int hang)
{
}
print_2DC_array(str, 3);
四、变量的作用域和生命周期
1.标识符作用域(空间角度)
作用域:标识符/变量可以被使用的范围
局部作用域:在{}内部被定义的变量的作用范围
局部变量:定义在局部作用域中的变量(函数内部定义的变量、函数形参)
全局作用域:可使用范围在全局,{}外面。比如:定义函数
全局变量:定义在全局作用域的变量。
注意:
1. 标识符必须先定义再使用。
2. 在相同作用域中,不能定义同名标识符(变量、函数)。
3. 在具有包含关系的作用域中,出现了同名标识符,外层标识符在内层不可见(就近原则)
2.变量的生命周期(时间角度)
变量的生命周期:从变量的空间开辟到空间回收对应的生存期。
动态生命周期:
局部变量:在被定义的时候开辟空间,超出其作用域范围空间被回收。
静态生命周期:和程序运行的生命周期一样长
全局变量:从程序运行之前空间开辟,程序运行结束空间被回收。
static修饰的静态变量:从程序运行之前空间开辟,程序运行结束空间被回收。
1. 作用域没发生变化,局部作用域。
2. 生命周期变为静态生命周期。
总结:
局部变量:
1. 作用域在局部,超出局部作用域无法访问;
2. 动态生命周期,定义时开辟空间,超出作用范围空间被回收;
3. 局部变量保存在栈区,未被初始化为随机值。
全局变量/static静态变量:
1. 全局变量作用域在全局,static静态变量作用域在局部;
2. 静态生命周期:程序运行之前空间开辟,程序运行结束空间被回收
3. 全局变量/static静态变量保存在数据区。
4. 全局变量/static静态变量未被初始化时,默认为0。
5. 未初始化的全局变量/static静态变量存储在.bss段,.bss段系统默认清0.
6. 已初始化的全局变量/static静态变量存储在.data段。
3.变量的存储类型
int a;
存储类型 数据类型 变量名;
变量的存储类型:
auto:默认存储类型
static:
1. static修饰局部变量,静态变量,具备静态生命周期(延长局部变量的生命周期)。
2. static修饰函数:该函数只允许在当前原文件中被调用。
3. static修饰全局变量:该变量只允许在当前文件中使用。
register:
寄存器变量。register修饰变量时,建议编译器将该变量存储在寄存器中。
extern:
修饰全局变量/函数声明。
1. extern修饰全局变量,用来声明全局变量,表示允许被外部的.c使用。
2. extern声明函数,表示该函数允许被外部的.c使用。
网硕互联帮助中心




评论前必须登录!
注册