C语言形参和实参的区别

简介: 在C语言中,形参(形式参数)与实参(实际参数)有着明确的角色区分。形参是在函数定义中声明的参数,用于接收调用函数时传入的数据;实参则是调用函数时传递的具体值或变量。简言之,实参提供数据,形参接收并处理这些数据。

在C语言中,形参(形式参数)和实参(实际参数)是函数定义和调用中的两个重要概念。它们之间的主要区别如下:

1. 定义

  • 形参(Formal Parameter)

    • 是函数定义时在函数头部指定的参数。
    • 形参的作用是接收传入函数的值或引用,作为函数内部使用的变量。
    • 形参在函数调用时被赋予实参的值。
    • 语法示例:
      void function(int a, float b) {
             
          // a 和 b 是形参
      }
      
  • 实参(Actual Parameter)

    • 是在函数调用时传递给函数的实际值或变量。
    • 实参可以是常量、变量、表达式等,传递给形参。
    • 语法示例:
      function(5, 3.14); // 5 和 3.14 是实参
      

2. 使用时机

  • 形参

    • 在函数定义时被创建。
    • 存在时间:形参的生命周期仅限于函数的调用过程中。
  • 实参

    • 在函数调用时被访问。
    • 存在时间:实参的生命周期与其声明的作用域相同。

3. 作用域

  • 形参

    • 其作用域限于函数内部,可以在函数体内使用。
    • 遇到函数返回后,形参的值会被销毁。
  • 实参

    • 其作用域根据其定义位置而定,在函数外的实参可以在函数外部访问,而局部变量则不能。

示例

以下是一个简单的示例,帮助理解形参和实参的区别:

#include <stdio.h>

void add(int x, int y) {
    // x 和 y 是形参
    printf("Sum: %d\n", x + y);
}

int main() {
   
    int a = 10;
    int b = 20;

    add(a, b); // a 和 b 是实参
    add(5, 15); // 5 和 15 也是实参

    return 0;
}

在该示例中:

  • add 函数中,xy 是形参。
  • main 函数中,ab 是实参的一个例子,同时 515 也是另一个例子。

总结

形参是在函数定义时出现的变量,用于接收实参并在函数体内操作;而实参是在调用函数时传递给函数的实际值或变量。形参和实参的一一对应关系在函数调用时确保了函数的灵活性和重用性。

相关文章
|
7天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
3天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
20天前
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
35 10
|
1月前
|
存储 C语言
C语言中a 和&a 有什么区别
在C语言中,&quot;a&quot; 是一个变量的名字,代表存储在内存中的某个值。而&quot;&a&quot; 则是获取该变量的内存地址,即变量a在计算机内存中的具体位置。这两者的主要区别在于:&quot;a&quot; 操作的是变量中的值,&quot;&a&quot; 操作的是变量的内存地址。
100 23
|
1月前
|
程序员 编译器 C语言
C中的 malloc 和C++中的 new 有什么区别
在C语言中,`malloc`函数用于在运行时分配内存,返回指向所分配内存的指针,需显式包含头文件 `&lt;stdlib.h&gt;`。而在C++中,`new`不仅分配内存,还对其进行构造初始化,且直接使用类型声明即可,无需额外包含头文件。`new`还支持数组初始化,能更好地融入C++的面向对象特性,而`malloc`仅作为内存分配工具。使用完毕后,`free`和`delete`分别用于释放`malloc`和`new`分配的内存。
50 21
|
18天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
22天前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
22天前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
25天前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
29天前
|
存储 缓存 C语言
C语言:链表和数组有什么区别
C语言中,链表和数组是两种常用的数据结构。数组是一种线性结构,元素在内存中连续存储,通过下标访问,适合随机访问且大小固定的情况。链表由一系列不连续的节点组成,每个节点存储数据和指向下一个节点的指针,适用于频繁插入和删除操作的场景,链表的大小可以动态变化。