C语言的形参跟实参区别跟联系

简介: C语言的形参跟实参区别跟联系

C语言的形参跟实参区别跟联系

在C语言中,函数的参数分为形式参数(形参)和实际参数(实参)。理解这两者的概念和区别对于掌握C语言的函数调用机制至关重要。

形式参数是在函数定义时列出的参数,用于接收函数调用时传递的值。形参只在函数被调用时才占用内存空间,调用结束后立即释放。因此,形参的作用范围仅限于函数内部。形参可以是任何有效的C语言标识符,它在函数体内作为局部变量使用。虽然形参在函数定义时并没有具体的值,但它为函数调用时传递的数据提供了一个占位符。

实际参数是在函数调用时传递给函数的值或变量。实参可以是常量、变量、表达式或函数等。在函数调用时,实参的值被复制给对应的形参,因此函数体内对形参的修改不会影响到原始的实参。实参的数量和顺序必须与函数定义中的形参一致。如果实参的数量或顺序与形参不匹配,将导致编译错误或运行时错误。

形参在函数被调用时才分配内存空间,调用结束后立即释放;而实参在函数调用前就已经存在,并在函数调用时将其值传递给形参。形参的作用范围仅限于函数内部,而实参的作用范围则取决于其定义的位置。在函数调用时,实参的值被复制给形参。因此,函数体内对形参的修改不会影响到原始的实参。这种数据传递方式称为值传递。

以下是一个简单的C语言函数示例,用于演示形参和实参的用法:

 

 

#include <stdio.h> 

 

 

 

// 函数定义,形参为a和b

 

int add(int a, int b) {

 

int sum = a + b; // 在函数体内使用形参进行计算

 

return sum; // 返回计算结果

 

}

 

 

 

int main() {

 

int x = 5; // 实参x

 

int y = 10; // 实参y

 

int result = add(x, y); // 调用函数add,将实参x和y的值传递给形参a和b

 

printf("The sum is: %d\n", result); // 输出计算结果

 

return 0;

 

}

在这个示例中,函数add定义了两个形参a和b。在main函数中,我们定义了两个实参x和y,并将它们的值传递给函数add的形参a和b。函数add计算a和b的和并返回结果。最后,我们在main函数中输出结果。

 

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