C语言函数和变量的使用详解

需积分: 34 4 下载量 86 浏览量 更新于2024-07-13 收藏 112KB PPT 举报
全局静态变量-函数与指针 在 C 语言中,全局静态变量是一种特殊类型的变量,它们的作用域仅限于当前文件内部,不可以被其他文件访问。这种变量的定义需要前缀关键字 static,例如: static int speed; 如果在另一个文件中尝试访问该变量,例如: extern int speed; 编译器将会报错,无法引用该变量。这是因为全局静态变量的作用域仅限于当前文件内部,不可以被其他文件访问。 需要注意的是,全局静态变量如果不赋初值,则其初值为 0,这与普通变量不同,普通变量如果不赋初值,则其初值不可预知。 在 C 语言中,还有函数的定义和声明。函数定义的格式为: 类型 函数名(参数列表) { // 函数体 } 例如: int add(int x, int y) { return x + y; } 函数声明的格式为: 类型 函数名(参数列表); 例如: int add(int x, int y); 如果函数在同一个文件中,则可以使用函数声明。如果函数在其他文件中,则需要使用extern关键字进行声明,例如: extern int add(int x, int y); 在实际编程中,函数的定义通常放在 .c 文件中,而函数的声明则放在 .h 文件中,这样可以将接口和实现分离。 函数调用可以单独调用,也可以作为另一个函数的参数。例如: iSum = add(123, 98); printf("Sum = %d\n", add(789, -56)); 在函数调用中,形式参数和实际参数是不同的。形式参数是函数定义中的参数,例如: int add(int x, int y) { return x + y; } 实际参数是函数调用时传递的参数,例如: int main(void) { int a = 5, b = -99; int sum = add(a, b); printf("sum = %d\n", sum); } 函数参数遵循值传递原则,当调用函数时,实际参数会传递给形式参数,但它们占用不同的存储地址。 例如: 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 的值,但实际上并没有交换,因为实际参数 a 和 b 的地址与形式参数 x 和 y 的地址不同。 要实现交换,需要使用指针,例如: 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 的值。