形参与实参的传递

合集下载

西门子S7-300形参与实参

西门子S7-300形参与实参

我爱自动化
will666
侠士
经验值: 1389
发帖数: 926
精华帖: 5
主题:回复:什么叫实参什么叫形参
2010-11-04 21:16:34 4楼
比如你编写了一个块,有两个输入a,b,一个输出c,然后程序里面做加法c=a+b。这个abc就是形参,没有调用之前他们是不存在的。然后你调用这个快,在输入引脚使用了A,B,输出引脚使用了C,那么ABC就是实参,他们是实实在在有值的。
比喻的太形象了,很生动!建议加精!
智慧人生 品味舍得
300小小生
侠客
经验值: 831
发帖数: 626
精华帖: 1
主题:回复:什么叫实参什么叫形参
2010-11-20 14:18:17 21楼
呵呵,论坛里的高手就是多,可以把书本里的知识点比喻的这么生动。结合STEP7里具体点说可以是,假如我们有1个功能块FB1,功能FC1,几个FB1的背景数据块。在FB1里写公式 a+b+c,这里a,b,c就是形参。而在FC1里我们定义在I0.0=1时调用FB1,并令a=1,b=2,c=3.此时1,2,3就是实参。而定在I0.1=1时调用FB1,令a=10,b=20,c=30,此时10,20,30也是实参。建议楼主可以找个实例程序看看就很明白了
发帖数: 3984
精华帖: 18
主题:回复:什么叫实参什么叫形参
2010-11-15 13:57:45 14楼
举例说明:
例:
3X + 2Y =5Z
当X=48,Y=22,求Z?
其中X,Y,Z就是形参。48,22就是实参。
一日三省吾身

C++传值、传引用

C++传值、传引用

C++传值、传引⽤C++传值、传引⽤C++的函数参数传递⽅式,可以是传值⽅式,也可以是传引⽤⽅式。

传值的本质是:形参是实参的⼀份复制。

传引⽤的本质是:形参和实参是同⼀个东西。

传值和传引⽤,对⼤多数常见类型都是适⽤的(就我所知)。

指针、数组,它们都是数据类型的⼀种,没啥特殊的,因此指针作为函数参数传递时,也区分为传值和传引⽤两种⽅式。

e.g.void fun_1(int a); //int类型,传值(复制产⽣新变量)void fun_2(int& a); //int类型,传引⽤(形参和实参是同⼀个东西)void fun_3(int* arr); //指针类型,传值(复制产⽣新变量)void func_4(int*& arr); //指针类型,传引⽤(形参和实参是同⼀个东西)如果希望通过将参数传递到函数中,进⽽改变变量的值(⽐如变量是T a,T表⽰类型),则可以有这2种⽅式选择:1. 传a的引⽤:void myfun(T& a)2. 传a的地址的值:void myfun(T* a)传值⽅式这是最简单的⽅式。

形参意思是被调⽤函数的参数/变量,实参意思是主调函数中放到括号中的参数/变量。

传值⽅式下,形参是实参的拷贝:重新建⽴了变量,变量取值和实参⼀样。

写⼀段测试代码,并配合gdb查看:#include <iostream>using namespace std;void swap(int a, int b){int temp;temp = a;a = b;b = temp;cout << a << " " << b << endl;}int main(){int x = 1;int y = 2;swap(x, y);cout << x << " " << y << endl;return 0;}➜ hello-cpp git:(master) ✗ g++ -g ➜ hello-cpp git:(master) ✗ gdb a.out(gdb) b mainBreakpoint 1 at 0x4008fa: file , line 13.(gdb) rStarting program: /home/chris/work/hello-cpp/a.outBreakpoint 1, main () at :1313 int x = 1;(gdb) s14 int y = 2;(gdb) p &x$1 = (int *) 0x7fffffffdc58(gdb) p &y$2 = (int *) 0x7fffffffdc5c(gdb) s15 swap(x, y);(gdb) sswap (a=1, b=2) at :66 temp = a;(gdb) p &a$3 = (int *) 0x7fffffffdc2c(gdb) p &b$4 = (int *) 0x7fffffffdc28(gdb)可以看到,实参x和y的值为1和2,形参a和b的值都是1和2;⽽x与a的地址、y与b的地址,并不相同,表明形参a和b是新建⾥的变量,也即实参是从形参复制了⼀份。

二维数组的形参和实参定义

二维数组的形参和实参定义

二维数组的形参和实参定义
在C或C++编程语言中,二维数组可以作为函数的参数。

这通常涉及传递一个数组的引用,即数组的地址。

二维数组作为函数参数时,其形参和实参的定义如下:
形参
形参是在函数声明或定义中定义的参数。

对于二维数组,形参通常是一个指向指针的指针,或者是一个指向数组的指针。

这是因为二维数组本质上是一个指针的数组,每个指针指向一个一维数组。

例如,考虑以下函数:
```c
void printArray(int arr[][3], int rows) {
// 函数体
}
```
在这个例子中,`arr` 是一个指向包含3个整数的数组的指针。

`rows` 是这个二维数组的行数。

实参
实参是在调用函数时传递给函数的参数。

对于二维数组,实参通常是一个数组名。

当数组名用作实参时,它会被解释为该数组第一个元素的地址。

例如,你可以这样调用上面的函数:
```c
int main() {
int myArray[2][3] = {{1, 2, 3}, {4, 5, 6}};
printArray(myArray, 2); // 调用函数,传递二维数组和行数作为实参 return 0;
}
```
在这个例子中,`myArray` 是二维数组的名字,它会被解释为指向包含3个整数的数组的指针。

`2` 是这个二维数组的行数。

这两个值一起作为实参传递给 `printArray` 函数。

《C语言与程序设计》实验06---函数

《C语言与程序设计》实验06---函数

实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。

2. 熟练掌握形式参数与实际参数、参数值的传递。

3. 掌握函数的嵌套调用与递归调用。

4.学会使用指向函数的指针变量。

5.了解指向指针的指针的概念及带参数的main函数。

6. 掌握局部变量和全局变量。

7. 掌握变量的存储类型。

8. 了解内部函数和外部函数。

二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。

2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。

②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。

当函数值为整型时,类型符可以省略。

③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。

④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。

⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。

extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。

static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。

3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。

形参是函数的内部变量,只在函数内部才有意义。

在未出现函数调用时,形参不占内存。

对每个形参必须指明其名字和数据类型。

填空题——精选推荐

填空题——精选推荐

填空题⼆、填空题1. 设float x=2.5,y=4.7; int a=7;,则表达式x+a%3*(int)(x+y)%2/4 的值为。

2. 设 int x=17,y=5; 执⾏语句 x+=--x%--y 后,x的值为。

3. 设 int x=17,y=5; 执⾏语句 x%=x++/--y 后,x的值为。

4. 设 int a=7,b=6,c=5;,则表达式 (a+b)>(c*c)&&b==c||c>b 的值为。

5.设 int a=3,b=5,c=7;,则表达式a>c||c>b!=0&&c==b+a 的值为。

6.已知三⾓形边长a、b、c和s=(a+b+c)/2,计算其⾯积的算术表达式为。

7. 已知⽅程ax2+bx+c=0系数a、b、c且存在两个实根,计算其中⼀个实根的算术表达式为。

8. p为本⾦,r为1年期存款年利率,计算存款p元5年到期时本⾦、利息总和(计复利)的算术表达式为。

9.将数学式(x+1)e2x写作C语⾔的算术表达式为。

10.ch是字符变量,判断ch为⼤写英⽂字母的逻辑表达式为。

11. 判断int类型变量n是否为两位整数的逻辑表达式为。

12. 判断变量a、b的值均不为0的逻辑表达式为。

13. 判断变量a、b是否绝对值相等⽽符号相反的逻辑表达式为。

14. 判断变量a、b中必有且只有⼀个为0的逻辑表达式为。

15. m是值为两位数的整型变量,判断其个位数是奇数⽽⼗位数是偶数的逻辑表达式为。

16. 求解赋值表达式 a=5+(c=6)后表达式值、a、c的值依次为。

17. 求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c的值依次为。

18. 求解逗号表达式 x=a=3,6*a后,表达式值、x、a的值依次为。

19. 求解逗号表达式 (a=15,a*4),a+5,表达式值、a的值依次为。

20. 求变量a、b中最⼤值的条件表达式为。

python引用传递和值传递详解(实参,形参)

python引用传递和值传递详解(实参,形参)

6 a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
7 >>> f1(1, 2, 3, 'a', 'b', x=99)
8 a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
910>a>=>1f2b(1=,
2, d=99, ext=None) 2 c = 0 d = 99 kw =
这个应该很好理解,比较简单。
所谓的命名关键字参数就是在形参里面我们有一个对应的形参符号,然后在传入参数的时候,我们以形参符号赋值的形式传入 参数,这样做就是能让我们避免因顺序错误产生的程序错误。如这种形式:b=‘你好'
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
参数组合就是说在命名函数的时候,形参可以包含必选参数,默认参数,可变参数,命名关键字参数,关键字参数。 但是在 用这个五个参数的时候,一定一定要谨记,这个五个参数的传入顺序一定为 必选参数,默认参数,可变参数,命名关键字参 数,关键字参数。否则 程序一定会出错。
比如定义一个函数,包含若干种参数:
? 1def f1(a, b, c=0, *args, **kw): 2 print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) 3 4def f2(a, b, c=0, *, d, **kw): 5 print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

c51调用函数的各种格式

c51调用函数的各种格式

c51调用函数的各种格式(实用版)目录1.C51 函数调用的基本概念2.C51 函数调用的格式3.C51 函数调用的参数传递方式4.C51 函数调用的返回值5.C51 函数调用的注意事项正文【1.C51 函数调用的基本概念】在 C51 编程语言中,函数是一种可以实现特定功能的代码块。

函数调用则是指在程序中使用函数的过程。

通过函数调用,可以实现代码的模块化和重用,提高程序的可读性和可维护性。

【2.C51 函数调用的格式】在 C51 中,函数调用的格式包括以下要素:- 函数名:用于标识要调用的函数的唯一名称。

- 参数列表:用于传递给函数的实际参数,可以包含多个参数,参数之间用逗号分隔。

- 函数返回值:函数执行完成后返回给调用者的结果。

【3.C51 函数调用的参数传递方式】C51 函数调用的参数传递方式有两种:- 值传递:将实参的值传递给形参。

这种方式下,形参和实参是两个独立的变量,互不影响。

函数中的形参修改不会影响到实参的值。

- 指针传递:将实参的地址传递给形参。

这种方式下,形参和实参共享同一内存空间,函数中的形参修改会影响到实参的值。

【4.C51 函数调用的返回值】函数调用后,函数需要返回一个结果给调用者。

返回值的类型应与函数定义时指定的返回类型匹配。

如果函数不需要返回值,可以使用 void 类型作为返回类型。

【5.C51 函数调用的注意事项】- 函数调用时,应确保函数定义在前,调用在后。

否则,编译器无法识别函数。

- 函数调用时,应确保实参的类型与形参的类型匹配,否则会导致编译错误。

- 函数调用时,应避免使用未定义的函数。

否则,编译器会报错。

通过以上介绍,相信大家对 C51 函数调用的格式有了更清晰的认识。

函数参数返回值总结

函数参数返回值总结

函数的参数、返回值总结(一)参数◆函数分:有参函数:函数名(实参列表)无参函数:函数名()◆有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。

◆参数传递时,实参向形参一一对应进行单向的值传递。

值:可是数值(变量或数组元素)或数值的地址值(指针或数组名)。

(二)返回值函数的返回值即为函数调用后的结果,可有如下返回结果的方法:(1)通过return语句返回一个值;(2)利用地址做参数返回一个或多个值;(3)利用全局变量返回一个或多个值。

(三)例1、170页实验内容(1):打印由正三角和倒三角组成的图形。

有一个参数,无返回值。

实参向形参传递一个数值。

#include <stdio.h>/* 有一个参数,无返回值的函数,打印正三角 */void f1(int n) /* 形参只能是变量,用来接收实参传来的数值 */{ int i,j,k;for(k=1;k<=n;k++){for(i=1;i<=10-k;i++)printf(" ");for(j=1;j<=k;j++)printf(" *");printf("\n");}}/* 有一个参数,无返回值的函数,打印倒三角*/void f2(int n){int i,j,k;for(k=n;k>=1;k--){for(i=1;i<=10-k;i++)printf(" ");for(j=1;j<=k;j++)printf(" *"); /*双引号内应为“空格加半角星号”*/printf("\n");}}main(){ int n;scanf("%d",&n);f1(n); /* 实参可以是常量、变量或表达式,将一个确定的数值传给形参 */ f2(n-1); /* 无返回值函数的调用形式 */printf("\n");f2(n);f1(n);}2、171页实验内容(2):调用两个函数,求两个整数的最大公约数与最小公倍数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数参数——值传递
实参和形参必须个数相等,类型一致,顺序对应,进行数据的“单向的值传递”(即实参的值可以传给形参,形参的改变也不影响实参.实参可以是常量,变量,表达式或函数。
指针变量作为函数参数——地址传递
特点:共享内存,“双向”传递
将数字按从大到小输出:
代码一:值传递
#include <stdio.h>
scanf("%d,%d",&a,&b);
pointer_1=&a; pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("%d,%d\n",*pointer_1,*pointer_2);
}
结果:输入:5,9
输出:5,9
代码三的思考:地址传递相当于传递地址的值,实质也可以看做“值传递”,
}
结果:输入:5,9
输出:9,5
指针变量作为函数参数——地址传递
特点:共享内存,“双向”传递
代码三:地址传递
#include <stdio.h>
void swap(int *p1, int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
void main()
{ int a,b;
int *pointer_1,*pointer_2;
即p1,p2的改变不影响pointer_1,pointer_2的值。自定义函数中形参值交换,相当于只是换了形参的地址,
对实参
关于形参与实参的这三个实例,三个有所不同,我们一般只会注意到前面两个实例,第三个一般没有注意到,第三个实例要理解到实质上地址传递中传递的也是地址的值,即地址传递实质也是值传递.
}
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a; pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("\n%d,%d\n",a,b);
swap(*pointer_1,*pointer_2);
printf("\n%d,%d\n",a,b);
}
结果:输入:5,9
输出:5,9
代码二:地址传递
#include <stdio.h>
void swap(int *p1, int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a; pointer_2=&b;
if(a<b)
相关文档
最新文档