1、作用
1、可以让程序模块化
2、可以减少重复代码
3、提高程序的可读性、可维护性和重用性
2、函数的三个部分
1、函数的定义
函数类型 函数名 (数据类型 1 形参1, 数据类型2 形参2,...)
{
语句块;
return 返回值;
}
函数类型:函数运行结果的类型,如果不写默认为int类型,如果运行不想有运行结果的
的类型可以为void类型
#include <stdio.h>
//两数相加的函数
int add(int a ,int b)
{
int num = 0;
num = a + b;
}
int main(void)
{
int a = 10, b = 5;
int num = 0;
num = add(a + b);
return 0;
}
//函数名:与变量名的要求保持一致
// 形参:定义时表示对数据的处理方式
//返回值:函数运行的结果
注意:
1、返回值类型与函数类型不一致,将返回值强制转化为函数类型
2、如果实参类型和形参不同,会将实参类型转换为形参类型之后传入函数内部
2、函数的调用
函数名(实参1,实参2,...)
注意:实参与形参的个数一一对应
3、函数的声明、
函数类型 函数名 (数据类型 1 形参1, 数据类型2 形参2,...);
include <stdio.h>
int add(int a ,int b);//函数的声明
int main(void)
{
int a = 10, b = 5;
int num = 0;
num = add(a + b);
return 0;
}
//两数相加的函数
int add(int a ,int b)
{
int num = 0;
num = a + b;
}
为什么要声明函数?
1、如果在调用函数之前没有声明它,编译器可能无法识别这个函数。
2、函数声明可以使程序更加模块化,尤其是在多个源文件中工作时,可以在一个 文件中声明函数,在另一个文件中定义函数。
3、可以确保程序的正确性和组织性。
3、变量的作用域
指的是变量在程序中可以被访问和修改的范围,作用域决定了一个变量在程序中的生命周
期以及它能被访问的区域
1、局部变量
局部变量是指在函数或代码块内部声明的变量。它只能在声明它的函数或代码块中
访问,超出该范围后变量就不再有效
特点:
仅在声明它的函数或代码块中有效。
当函数或代码块执行完毕时,局部变量会被销毁。
局部变量的生命周期在其声明时开始,在函数或代码块结束时结束。
#include <stdio.h>
void function() {
int x = 10; // 局部变量 x
printf("x = %d\n", x); // 只能在函数内部访问
}
int main() {
function();
// printf("%d", x); // 错误:x在此作用域中不可访问
return 0;
}
2、全局变量
全局变量是指在所有函数外部声明的变量。它可以在整个程序中被任何函数访问和
修改,直到程序结束。
特点:
在整个程序中都有效,任何函数都可以访问。
全局变量的生命周期从程序开始执行到程序结束。
如果局部变量和全局变量有同名,局部变量会覆盖全局变量。
#include <stdio.h>
int x = 10; // 全局变量
void function() {
printf("x in function = %d\n", x); // 可以访问全局变量
}
int main() {
printf("x in main = %d\n", x); // 访问全局变量
function();
return 0;
}
3、静态变量
静态变量是指通过 static
关键字声明的变量。静态变量可以是局部的,也可以是全
局的。与普通局部变量不同,静态变量在程序运行时不会被销毁,其生命周期持续整
个程序的执行过程。对于局部静态变量,它仅在函数内部可见,但不会每次进入函数
时重新创建。
特点:
静态变量在程序生命周期内始终存在,且只有第一次初始化时才会被赋值。
局部静态变量只在函数内可见,其他函数无法访问。
全局静态变量在声明它的文件内可见,其他文件无法访问。
#include <stdio.h>
void function() {
static int count = 0; // 局部静态变量
count++;
printf("count = %d\n", count); // 静态变量会保留上次的值
}
int main() {
function(); // 输出 count = 1
function(); // 输出 count = 2
function(); // 输出 count = 3
return 0;
}
4、外部变量
外部变量是通过 extern
关键字声明的变量,它们通常定义在不同的源文件中。
extern
关键字用于引用其他文件中的全局变量。
特点:
extern
用于访问在另一个源文件中定义的全局变量。
它只声明变量,不定义变量(不分配内存空间)。
// file1.c
#include <stdio.h>
int x = 10; // 在 file1.c 中定义全局变量 x
// file2.c
#include <stdio.h>
extern int x; // 引用 file1.c 中定义的全局变量 x
void function() {
printf("x = %d\n", x); // 访问 file1.c 中的 x
}
4、变量的生存周期
1、变量从定义到被回收的整个过程称为生存周期
2、局部变量执行到变量定义时分配空间按,超过变量作用域回收空间
5、变量的存储类型
存储类型 数据类型 变量名;
1、存储的4中类型
auto 自动型存储(局部存储)
register 寄存器存储
extern 外部存储
static 静态存储
2、存储类型不写,默认为auto类型,auto将变量存储在栈空间中
3、全局变量存放在静态区,全局变量可以和局部变量重名,局部变量会在作用域内将全局
变量隐藏
4、register将数据存在CPU内部的寄存器中,如果寄存器存满等价于auto类型
5、extern声明一个变量/函数是外部存储的变量/函数
// file1.c
#include <stdio.h>
int global_var = 100; // 定义外部变量
void printGlobalVar() {
printf("global_var = %d\n", global_var);
}
// file2.c
#include <stdio.h>
extern int global_var; // 声明外部变量
void accessGlobalVar() {
printf("global_var in file2 = %d\n", global_var);
}
8、static
使得局部变量在函数调用间保持其值,不会在函数结束时销毁。作用域仍然是函数
内部。
静态全局变量:static
限制全局变量的作用域,仅在定义它的源文件中可见,无
法在其他文件中访问。
静态函数:static
限制函数的作用域,使其仅在定义该函数的源文件内可用。
生命周期:静态变量的生命周期是整个程序运行期,但其作用域可以受到限制。
使用 static
可以帮助你实现封装、限制作用域,并在需要保持变量状态时非常有用。
可以防止多文件全局变量重名
6、函数传参
1、值传递
1、实参将值传递给形参
2、函数体内部想使用函数体外部变量值的时候用值传递
3、形参是实参的副本,行参的变化不会影响实参的变化
2、整型数组的传递
int fun(int array[], int ten);
//array后面加[],表示传入的为整型数组名,而不是整数类型
//函数内部的array和外部数组名为同一数组,里面数据的变化会影响外面数组中值的变化
标签:函数,int,局部变量,C语言,作用域,全局变量,变量
From: https://blog.csdn.net/2302_77901571/article/details/145212849