当前位置: 首页 > news >正文

C++ 函数的参数传递

函数的参数传递 

1、函数的形参的内存空间问题: 

在未调用函数前,函数中的形式参数并不分配内存空间。只有在被调用执行时,才被分配临时存储空间。
函数调用结束后,形式参数的内存空间将被操作系统立刻收回。

2、函数的参数:

实际参数可以是任何符合形式参数类型的常量、变量、表达式。
函数参数传递的过程就是实际参数和形式参数相结合的过程, 
必须遵守三个一致:个数一致,顺序一致,类型一致。     √√√

3、函数参数的传递方式,或者说函数参数的调用方式分为三种:

(1) 传值(调用):函数形参变,原值不变   √√√

#include<iostream>
using namespace std;
void swap(int x,int y){int temp;temp = x;x = y;y = temp;cout << "传值:x=" << x <<  " " << "y=" << y << endl;}
int main(){int a = 10,b = 50;swap(a,b);cout << "原值:a=" << a << " "  << "b=" << b << endl;return 0;
}
输出(函数中传值只会变形参的值,原值不变):
传值:x=50 y=10
原值:a=10 b=50 

(2) 传址(调用):函数形参变了,原值也会变  √√√

#include<iostream>
using namespace std;
void swap(int *x,int *y){// 形式参数的类型定义为指针int temp;temp = *x;*x = *y;*y = temp;cout << "传址:x=" << *x <<  " " << "y=" << *y << endl;
}
int main(){int a = 10,b = 50;swap(&a,&b);// 实际参数必须是地址cout << "原值:a=" << a << " "  << "b=" << b << endl;return 0;
}
输出(传址:函数形参变了,原值也会变 ):
传址:x=50 y=10
原值:a=50 b=10

(3) 引用(调用):

(1.1)int& k_adr = k,导致地址相同,值之后会一同进行改变 √√√
#include <iostream>
using namespace std;
int main(){int k = 32;// 因为int& k_adr = k,所以k与 k_adr de地址现在一样,以后值一起改变 int& k_adr = k;cout <<  " int& k_adr = k的结果: "<<  " k= " << k <<  " k_adr= " << k_adr << endl;k++; cout <<  " k++ 的结果:"<<  " k= " << k <<  " k_adr= " << k_adr <<endl;k_adr = -5;cout <<  " k_adr = -5的结果: "<<  " k= " << k <<  " k_adr= " << k_adr << endl;int i = 100;k_adr += i;cout <<  " i = 100,k_adr += i的结果: "<<  " k= " << k <<  " k_adr= " << k_adr << endl;return 0;
}
输出:
 int& k_adr = k的结果:  k= 32 k_adr= 32
 k++的结果:  k= 33 k_adr= 33
 k_adr = -5的结果:  k= -5 k_adr= -5
 i = 100,k_adr += i的结果:  k= 95 k_adr= 95 
(1.2)函数形参&a &b 之后,函数中的a b与原值a b都会改变 
#include<iostream>
using namespace std;
void swap(int &a,int &b){int temp;temp = a;a = b;b = temp;cout << " &a &b之后a b的值:" << a <<  "  " << b << endl;
}
int main(){int a = 10,b = 50;swap(a,b);cout << " 原值a b的值:" << a <<  "  " << b << endl;return 0;
}

输出:(函数形参&a &b 之后,函数中的a b与原值a b都会改变)
 &a &b之后a b的值:50  10
 原值a b的值:50  10 


http://www.mrgr.cn/news/52757.html

相关文章:

  • repo 命令大全(第一篇 repo init)
  • 【Linux线程】Linux多线程编程:深入理解线程互斥与同步机制
  • HDLBits中文版,标准参考答案 | 5 Verification: Writing Testbenches | 验证:编写测试平台
  • 【C++贪心】1775. 通过最少操作次数使数组的和相等|1850
  • 架构师之路-学渣到学霸历程-20
  • 《ESP32调试异常集锦》之移植I2C程序时i2c_master_cmd_begin返回-1
  • fiddler抓包23_重放请求(Replay)
  • 对比长安链、FISCO BCOS、蚂蚁链
  • OpenAI推出Swarm框架:简化多AI智能体系统交互
  • Python | Leetcode Python题解之第491题非递减子序列
  • 【JavaEE】【多线程】volatile,wait/notify
  • 【Qunar风控安全产品的探索之路】
  • 【算法】力扣:K个一组反转链表
  • R01 vue+springboot 高考志愿推荐AI问答大数据平台
  • LabVIEW提高开发效率技巧----VI继承与重载
  • 【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制
  • AI学习指南深度学习篇-预训练模型的实践
  • Nodemon 深入解析与使用
  • 【MySQL】聚合函数和分组查询
  • 【ShuQiHere】 机器学习中的网格搜索(Grid Search)超参数调优