云计算百科
云计算领域专业知识百科平台

C语言中的函数(二维整形数组和一二维字符型数组)及变量的作用域和生命周期

一、函数和一维字符型数组

传参:

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使用。

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言中的函数(二维整形数组和一二维字符型数组)及变量的作用域和生命周期
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!