C语言函数调用解析:参数传递的秘密

需积分: 34 1 下载量 2 浏览量 更新于2024-07-14 收藏 2.2MB PPT 举报
"孙老师讲解C语言中的函数调用和实参与形参的匹配规则,以及C语言的特点和简单程序的构成。" 在C语言中,函数是程序的基本模块,它们可以执行特定的任务并可能接收输入参数,即实参,同时返回结果。函数调用的一般形式是函数名后跟一对括号,括号内列出实参。在提供的代码示例中,`main()` 函数调用了名为 `f()` 的函数,并传递了两个整数作为实参,`i` 和 `i+1`。 ```c int main() { int i = 2, p; p = f(i, ++i); // 调用f函数,i和i+1作为实参 printf("%d", p); } int f(int a, int b) { int c; if (a > b) c = 1; else if (a == b) c = 0; else c = -1; return c; } ``` 这里要注意的是,实参的值传递到形参是按位置匹配的,即 `f()` 函数的形参 `a` 和 `b` 分别接收 `main()` 中 `i` 和 `i+1` 的值。但不同编译器对于实参求值的顺序可能有所不同,例如Turbo C遵循从右至左的顺序。在上述例子中,由于 `i` 是先被递增再传递,所以实际传递的值可能是 `3` 和 `3`,导致 `f()` 返回 `0`。 在讨论函数调用的顺序时,我们需要注意,如果实参是变量,它们的计算顺序可能根据编译器的不同而变化。例如,`j=i; k=++i; p=f(j,k);` 这段代码在某些编译器下可能先计算 `++i` 再赋值给 `k`,而在其他编译器下可能先赋值给 `j` 再递增 `i`。这可能会导致不同的运行结果。 C语言的特点包括: 1. 结构化的控制语句,允许对程序流程进行精确控制。 2. 丰富的数据类型,如整型、浮点型、字符型、数组、指针、结构体和共用体等。 3. 直接内存访问和位操作能力,使得低级别的硬件操作成为可能。 4. 大量的运算符,支持多种操作。 5. 预处理功能,如宏定义和条件编译。 6. 良好的可移植性,基本代码可以在不同平台间轻松迁移。 7. 生成的目标代码效率高,程序执行速度快。 编写和运行C程序通常涉及以下步骤: 1. 使用文本编辑器创建源代码文件(如 `.c` 文件)。 2. 使用C编译器将源代码编译为对象文件(`.obj`)。 3. 链接器将对象文件转换为可执行程序(`.exe`)。 4. 可以使用调试器对程序进行调试。 常见的C语言编译器包括Turbo C和Visual C++等,后者是集成了编辑、编译、链接和调试等功能的集成开发环境(IDE)。在Visual C++中,可以创建控制台应用程序工程来编写和运行C程序。 理解C语言的函数调用机制、实参与形参的关系、编译器的差异以及程序的构建过程是学习C语言的基础,这些知识对于后续的编程实践至关重要。