形参的改变如何影响实参
来源:互联网 发布:mac豆沙色口红推荐 编辑:程序博客网 时间:2024/05/17 05:56
在编程中,形参的改变是无法影响实参的,比如下面的代码:
#include<stdio.h>void fun(int m){m=5;}int main(){int n=10;fun(n);printf("%d",n);//输出10return 0;}
那么有什么办法能将数据返还给调用自己的上层函数呢?
下面我简单记录下现在想到的几种办法:
1. return
#include<stdio.h>int fun(int m){m=5;return m;}int main(){int n=10;n=fun(n);printf("%d",n);//输出5return 0;}return的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入数组,然后将数组首地址返回给主调函数,较为麻烦。
2. 全局变量
#include<stdio.h>int n=10;void fun1(){n=5;}void fun2(){int n=7;printf("%d",n);//输出7}int main(){printf("%d",n);//输出10fun1();printf("%d",n);//输出5fun2();printf("%d",n);//输出5return 0;}虽然说全局变量没有了个数的限制,而且遇到函数中同名局部变量时,全局变量还不起作用(县官不如现管)。
但是毕竟大型工程并不是由一人编写的,一个地方全局变量的改动将会影响整个工程,所以尽量还是少用。
3. 指针
指针是直接指向内存单元的:
#include<iostream>using namespace std;int main(){int m,n=10;m=n;cout<<&m<<" "<<&n;//输出0018FF44 0018FF40int *p,*q;p=q=&n;cout<<q<<" "<<p;//输出0018FF40 0018FF40return 0;}变量m与变量n的地址不同,因此一方改变后互不影响;p,q均指向变量n,在内存在指向同一单元,一方改变互有影响。
#include<stdio.h>void fun(int *p){*p=5;}int main(){int n=10;fun(&n);printf("%d",n);//输出5return 0;}
4. 引用
#include<stdio.h>void fun(int& m){m=5;}int main(){int n=10;fun(n);printf("%d",n);//<span style="font-family: Arial, Helvetica, sans-serif;">输出5</span>return 0;}引用是C++中的概念,其相当于为变量起了个别名。其在初始化时必须赋值,且赋值后在程序中不可更改,这两点和指针有明显的区别。
综上,推荐使用指针和引用将被调函数的数据返回给主调函数。
0 0
- 形参的改变如何影响实参
- 形参的数值改变不会改变实参的值
- 形参值的改变不会影响对应的实参的值
- 实参和形参指针做函数参数时,如何改变main函数变量的值
- 参数传递---形参改变实参指针变量的值
- JAVA里怎么样在调用方法时同时改变实参的值 (形参改变实参)
- c++指针使用形参改变实参
- 不能企图通过改变指针形参的值而使指针实参的值改变
- C++ char* 的若干问题之二:char*作为形参能否影响实参的值
- 图解为什么形参的变化不会改变实参的值?
- java中最经典的实参和形参及引用值的改变
- 形参改变实参的值不变(C语言基础知识加例题讲解)
- 改变实参
- 不能通过改变形参指针的值(形参所指向的地址)来改变实参指针的地址,实现改变实参指针所指向地址变量的值。
- 函数不能改变实参的值
- C#控制台 类作为函数的参数,如何断开实参与形参的关联
- 以指针作为函数参数,不能改变实参指针变量的值从而改变实参值
- C、C++和C#中如何改变实参
- Scalaz(53)- scalaz-stream: 程序运算器-application scenario
- 隐私策略
- Python
- C#控制台基础 list<int>添加元素并输出实例
- 最长公共子序列
- 形参的改变如何影响实参
- JAVA中对null进行强制类型转换
- 最长公共子序列(动态规划)
- coreseek中文搜索
- Informatica PowerCenter 常用转换组件一览表
- 二叉排序树 (sdut oj 2482)
- QT tcp Socket 通信开发
- PopWindow的使用
- Redis (error) NOAUTH Authentication required.解决方法