-
2021-05-30 22:06:17
在函数形参列表中,可以通过加 const 修饰形参引用,来防止形参改变实参。
void showValue(const int& v) { // 加了 const 修饰形参,则该形参不能被修改值 //v += 10; // 由于上面加了 const ,因此这行会报错; 如果上面不加 const,则这里会修改实参。 cout << "v = " << v << endl; } int main() { //函数中利用const常量引用防止误操作修改实参 int a = 10; showValue(a); cout << "a = " << a << endl; return 0; }
更多相关内容 -
c++指针使用形参改变实参的方法
2020-08-31 03:13:09下面小编就为大家带来一篇c++指针使用形参改变实参的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
用指针解决形参改变实参
2020-05-17 23:59:09当函数需要用形参改变实参时,简单的传值不能解觉问题。这时就需要使用指针解决问题。 例:int a=10;b=20;要求写一个函数将a,b的值互换。 错误代码: 1. //交换失败,原因a,b仅仅只是赋值,main中的a和Swap中的a不是...当函数需要用形参改变实参时,简单的传值不能解觉问题。这时就需要使用指针解决问题。
例:int a=10;b=20;要求写一个函数将a,b的值互换。
错误代码:
1.//交换失败,原因a,b仅仅只是赋值,main中的a和Swap中的a不是同一个变量 void Swap_err(int a,int b) { int tmp = a; a = b; b = tmp; }
//交换失败,只是交换形参的指向(交换钥匙),没有解引用 void Swap_err2(int *p1,int *p2) { int *tmp = p1; p1 = p2; p2 = tmp; }
void Swap_err3(int *p1,int *p2) { int *tmp;//野指针,悬挂指针,tmp是个局部变量,默认值为随机值 *tmp = *p1;//*tmp崩溃,野指针不能访问 *p1 = *p2; *p2 = *tmp; }
正确代码:
void Swap(int *p1, int *p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int a = 10; int b = 20; printf("%d,%d\n", a, b); Swap(&a, &b); printf("%d,%d\n", a, b); return 0; }
运行结果:
-
C++中使用形参改变实参变量的值
2020-07-14 11:05:33C++中使用形参改变实参变量的值 当实参为普通变量的时候 若形参为指针,例如 ```bash int main() {int a=3,b=4; swap(&a,&b);} void swap(int *x,*yC++中使用形参改变实参变量的值
- 当实参为普通变量的时候
若形参为指针,例如
```bash int main() {int a=3,b=4; swap(&a,&b);} void swap(int *x,*y) {x=1; y=2`}
另外一种情况就是形参为引用参数,
int main() {int a=3,b=4; swap(a,b);} void swap(int &x,&y) {x=1; y=2`}
即不是将实际参数的地址传递到函数形参中,而是直接将对象名(变量名)传递过去
2.当实际参数为数组的时候
当形参为指针的时候,和上面的用法一致,只不过数组中传递地址的方式比较简单,只需要将数组名传递就好,另外形参接受地址时,也只需要写成下方的格式int main() {int a[]={1,2},b[]={3,4}; swap(a,b);} void swap(int x[],y[]) {}
或者
int main() {int a[]={1,2},b[]={3,4}; swap(a,b);} void swap(int *x,*y) {}
此外,也可以用引用的方式,这里不做赘述了
- 当实参为普通变量的时候
-
C语言小细节(1)——用指针实现函数形参改变实参
2020-10-28 09:02:05用指针实现函数形参改变实参 在普通情况下,定义一个带有形参的子函数之后,当调用函数调用该子函数时,实参的值只是复制给形参,再参与子函数里面的数值运算,但原实参的值并不会改变, 举个栗子 #include <...用指针实现函数形参改变实参
在普通情况下,定义一个带有形参的子函数之后,当调用函数调用该子函数时,实参的值只是复制给形参,再参与子函数里面的数值运算,但原实参的值并不会改变,
举个栗子#include <stdio.h> void interchange(int u, int v) { int temp; temp=u; u=v; v=temp; } void main() { int x=5, y=10; printf("x=%d,y=%d\n",x,y);//此时系统输出x=5,y=10 interchange(x,y); printf("x=%d,y=%d\n",x,y)//你以为输出的x=10,y=5?,错了,x,y的值只是复制给u,v而已,x,y本身的值并不会改变,所以输出的还是x=5,y=10 }
但是,如果子函数输入的是x,y的地址,即直接把值放在x,y的地址里面,就可以实现interchange函数的功能了,那么这个时候就需要用到指针,若想函数的输入为地址,那么就应该把void interchange(int u, int v)改为void interchange(int * u, int * v),这就代表函数的形参是地址变量(指针),那么调用的时候,输入的也应该是x,y的地址, 所以调用的时候应该为interchange(&x,&y)
代表改为:
#include <stdio.h> void interchange(int * u, int * v) { int temp; temp=*u;//* 为取值运算符,因为u,v为地址,参加运算的也不是地址而是地址里面存储的变, *u=*v; *v=temp; } void main() { int x=5, y=10; printf("x=%d,y=%d\n",x,y);//此时系统输出x=5,y=10 interchange(&x,&y); printf("x=%d,y=%d\n",x,y)//这时候系统就输出x=10,y=5了 }
-
关于自定义函数中通过形参改变实参的问题
2019-10-03 13:29:16无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。 形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元... -
c语言函数的值传递机制(swap函数怎么通过形参改变实参的值)
2021-10-03 20:41:43swap函数中体现出的c语言函数的值传递机制(形参中int * &是什么意思) 目前初学C语言,对于深层内存机制了解不是十分透彻,只是将自己的理解方式简单记录一下。 我们知道交换两个变量的数值非常简单,只需要一... -
值传递-形参改变实参不变
2020-03-09 09:16:38形参改变前 形参改变后 -
形参改变实参的值不变(C语言基础知识加例题讲解)
2017-02-18 22:46:18即形参的值改变不影响实参的值,不是为了说明,形参的值改变,调用函数进行计算出来的值不变,而是为了说明,形参和实参同名的情况下,改变形参的值实参的值不变。 34 在C语言中,只有在使用时才占用内存单元的... -
python中修改形参对实参的影响,如何避免形参对实参的影响
2020-12-09 21:11:16自定义一个测试函数,通过对比形参和实参的ID来研究修改形参对实参的影响。 def test(a) : print("a =",a,id(a)) c = 20 test(c) print("c =",c,id(c)) a = 20 140707504189792 c = 20 140707504189792 传参后a... -
JAVA里怎么样在调用方法时同时改变实参的值 (形参改变实参)
2021-03-07 03:08:20实参:如果是基本类型,则实参不会变(传的是值);如果是对象,则实参会改变(传的是引用)。例如:public class Java{ public static void main(String[] args) { int b =5; changeInt(b); System.out.println(b);}... -
形参如何改变实参
2021-12-17 21:34:45形参、实参 -
C#形参与实参
2021-04-12 23:19:56C#中的形参和实参 形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。 实参(实际参数) 函数被调用时给出的参数... -
为什么指针变量做形参可以改变实参的数据
2021-11-14 00:44:03形参不能传任何东西给实参,实参传过去的东西都是一个副本!!! 下面以一个交换数据的被调函数片段为例 在指针变量由实参传递给形参时传过去的实际是指针变量的值,即一个地址,在 t=*p1 *p1=*p2 *p2=t 的过程中实际是... -
C语言之通过函数形参修改实参
2020-01-06 12:01:12#include <stdio.h> int x = 1; int y = 2;... } // 通过变量传递,对形参内容修改,实参不变 void modify_2(int *a) { *a = 22; } // 通过地址传递,对实参内容修改,实参修改 void modify... -
Java如何在调用方法时,同时改变实参的值? 即 形参改变实参
2018-07-31 17:31:45实参:如果是基本类型,则实参不会变(传的是值); 如果是对象,则实参会改变(传的是引用)。 具体实例和分析如下: 示例一:传入参数为整形变量: public class Java{ public static void main(String[] ... -
c语言——指针作为函数形参,改变实参的值的问题。
2021-05-23 21:03:49所以一般的传值传参不会改变实参的值。但是若是函数的形参是指针变量的话在调用函数时将变量的地址传递给指针,在函数内部对函数进行解引用改变指针的值那么相应实参的值也会被更改。这就是所谓的传址传参。这种传参... -
形参与实参
2021-04-18 17:06:52形参变量: 形参变量是功能函数里的变量,只有在被调用的时候才分配内存单元,调用结束后立即释放。所以形参只在函数内部...举例一:(形参不能改变实参) 看看下面这段代码中实参和形参的位置, 这个过程中实参并 -
php中函数的形参与实参的问题说明
2020-12-18 07:12:35但是如果在形参中加入地址符时候就会改变实参的值,为什么? 请看下面的例子: 复制代码 代码如下: <?php //编写一个函数swap(),测试该函数的实参值无改变 function swap($a,$b) { echo “进入swqp()函数前 \n”;... -
Java——形参和实参的区别
2021-02-12 10:03:14形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存... -
参数传递---形参改变实参指针变量的值
2017-08-13 17:32:34实参是指针,想通过函数调用改变该指针,则形参需要定义成指向指针的指针。 就是通过找到该指针的地址,然后修改地址的内容(即指针)的方法来改变指针的指向,属于对地址的直接访问。 假如有函数 void deleteNode... -
通过指针形参修改实参的值
2019-02-25 16:15:42通过指针形参修改实参的值1 注意:图示使用的地址只是假设的,并不是真正的内存地址,只是说明原理 先说说修改基本类型变量的值,比如说int类型,可以直接修改,也可以通过函数修改,看下代码 #include &... -
python 中的形参与实参
2022-03-13 16:51:28python 中的形参与实参 基本定义 形参:形式参数,在定义函数时,函数名后面括号中的参数; 实参:实际参数,在调用函数时,函数名后面括号内的参数,也就是将函数的调用者提供给函数的参数成为实际参数。 两种... -
java中形参和实参的区别
2021-02-12 21:29:20实参和形参是程序设计语言中的通用概念,并不是只有C,C++有而JAVA没有。关于他们两者的区别你知道吗?下面是学习啦小编为大家准备的java中形参和实参的区别,希望大家喜欢!java中形参和实参的区别篇一形参不能离开... -
形参和实参的区别
2021-06-03 09:48:21最近在做题的时候被问到了形参和实参的区别,所以在这具体解释一下。 首先什么是形参?什么是实参? 形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来... -
Python : 函数参数List 形参改变实参问题
2020-04-07 09:32:33在学习Python 中的排序中,发现一个问题,写的排序函数会改变实参中的原List,不方便,我做对比,经过查询和学习,总结如下: List 改变某一项值,会改变实参。 整体从新赋值,不会改变实参。 原因为形参和实参这两... -
C语言形参和实参的区别(非常详细)
2019-11-03 17:45:23如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用...形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来... -
JS 形参改变了实参 —— JS 的引用类型
2020-07-09 18:29:06对属性赋值 function changeVal(params) { params.name = 'lisi' } let obj = {name: 'zhangsan'} changeVal(obj) console.log(obj.name) // lisi 2. 对变量赋值 function changeVal(params) { ...
收藏数
66,163
精华内容
26,465