S3-函数(1)下

简介: S3-函数(1)

3、函数的参数

3.1实际参数

真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。

但注意:无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

3.2形式参数(形参)

形参是指(定义函数)函数名括号中的变量,因为形参只有在函数被调用的过程中才实例化(分配内存单元),所以叫形参。形参当函数调用之后就自动销毁了。因此形参只在函数中有效。

补充说明:

(1)形参与实参类型一致、顺序对应、个数相同  

(2)在被定义的函数中,必须指定形参的类型

(3)若形参与实参类型不一致,自动按形参类型转换

(4)形参与实参占用不同的内存单元,单向传递(实参传给形参)

例:写一个函数交换两个整形变量的内容

//代码1
#include<stdio.h>
void swap(int x, int y)
{
  int tmp = x;
  x = y;
  y = tmp;
}
int main()
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //用函数交换a和b的值
  swap(a, b);//调用函数
  printf("%d %d\n", a, b);
  return 0;
}


但是我们运行之后发现,并没有成功。

只是为什么呢?

调试


实参a和b

形参x,y

使用的不是同一空间(地址不同)


当函数调用的时候,实参传递给形参,这时形参是实参的一份临时拷贝,对形参的修改不影响实参。 (即形参实例化之后其实相当于实参的一份临时拷贝


那我们怎么可以实现交换呢?这就是我接下来要讲的函数调用。

4、函数调用

  4.1  传值调用

  4.2  传址调用


4.1传值调用

函数的形参和实参分别占用不同内存块,对形参的修改不会影响实参。

4.2传址调用


1、传址调用是把函数外部创建变量的内存地址传递给函数参数(形参)的一种调用函数的方式。

2、这种传参方式可以让函数和函数外边的变量建立真正的联系,也就是函数内部可以直接操作函数外部的变量。


注:1、在一个函数中可以多次调用其他函数,在调用语句中的函数名必须与函数定义中的函数名相同。

2、实际参数应与被调用函数定义中的形式参数个数相同、位置对应并且类型一致。

3、被调用函数必须存在

真正实现两个数内容的交换:传址调用

#include<stdio.h>
//pa--指针变量(用来存放地址的)
//*pa解引用操作-作用就是通过pa中的地址,找到a
void swap(int* pa, int * pb)
{
  int tmp =*pa;//*pa就是a
  *pa= *pb;
  *pb = tmp;
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  //用函数交换a,b
  swap(&a, &b);
  printf("%d %d\n", a, b);
  return 0;
}


注:地址是固定的,不能修改。

相关文章
|
7月前
|
程序员 编译器 C++
函数介绍
函数介绍
78 1
|
6月前
函数\judgeprime
函数\judgeprime
49 5
|
6月前
|
C++
<iomanip>库中setw(),setfill()等函数的使用
<iomanip>库中setw(),setfill()等函数的使用
133 0
|
程序员 编译器 C语言
从零带你认识函数(一)
从零带你认识函数
88 1
|
算法 编译器 程序员
|
程序员
函数
一、函数 函数是一段封装了特定功能的可重复使用的代码块。它接受输入参数,执行特定的操作,并返回一个结果。函数可以在程序中被多次调用,避免了重复编写相同的代码,提高了代码的复用性和可维护性。 函数通常具有以下几个特点: 1. 输入参数:函数可以接受零个或多个输入参数,用于传递数据给函数。输入参数可以是任意类型的数据,如整数、浮点数、字符串、数组等。函数可以使用输入参数来执行特定的操作。 2. 函数体:函数体是函数的核心部分,包含了函数要执行的操作。函数体是由一系列的语句组成的代码块,可以包含各种控制语句、变量声明、表达式等。函数体定义了函数的具体功能。 3. 返回值:函数可以返回一个结果给调用者
42 0
|
编译器
函函函函函函函函函函函数——two
函函函函函函函函函函函数——two
93 0
函函函函函函函函函函函数——two
|
存储 编译器 C语言
C语言知识点之 函数
C语言知识点之 函数
56 0