C语言中全局变量的使用与函数参数传递解析

需积分: 34 4 下载量 12 浏览量 更新于2024-07-13 收藏 112KB PPT 举报
全局变量在C语言中是指在任何函数外部定义的变量,它们在整个程序的生命周期内都存在,可以在多个函数之间共享数据。在给定的例子中,`speed`变量在`a.c`文件中被定义,而在`b.c`文件中通过`extern`关键字声明,表明它是一个外部变量,已经在其他地方定义过。如果希望全局变量私有,不被其他C文件访问,一种常见的做法是将其定义在某个特定的C文件内部,或者使用静态(`static`)修饰符。 ```c // 在 a.c 文件中 static int speed = 6; // 使用 static 使速度变量仅在当前文件可见 ``` 这样,`speed`变量就只在`a.c`文件内部可用,其他文件无法直接访问。如果需要在多个函数间共享但限制访问,可以使用静态全局变量。 函数是C语言中的基本构建块,用于组织代码并执行特定任务。函数定义包括返回类型、函数名和参数列表,如`int add(int x, int y)`。函数声明通常在调用函数之前进行,告知编译器函数的存在和参数类型,例如`extern int add(int, int);`。在头文件(`.h`)中声明函数接口是一种常见做法,而函数的实现放在对应的源文件(`.c`)中,以实现代码的模块化和封装。 函数调用有两种主要形式:直接调用,如`iSum = add(123, 98);`,以及作为另一个函数的参数,如`printf("Sum=%d\n", add(789, -56));`。实际参数(或实参)是函数调用时提供的值,形式参数(或形参)是函数定义中的占位符,它们在函数内部使用。 C语言中的参数传递默认是按值传递,这意味着形参接收的是实参的副本。例如在`swap`函数中,由于形参`x`和`y`只是实参`a`和`b`的副本,对形参的修改不会影响到实参,因此原始变量的值不会改变。若要实现交换,需通过指针传递参数,如下所示: ```c void swap(int* x, int* y) { int t; t = *x; *x = *y; *y = t; } int main(void) { int a = 5, b = -3; swap(&a, &b); // 通过地址传递 printf("%d, %d", a, b); return 0; } ``` 在这个版本的`swap`函数中,我们传入了变量`a`和`b`的地址,通过解引用指针`*x`和`*y`,可以直接修改实参的值,从而实现交换。