首页 > 编程语言 >《c++徒步》方法篇

《c++徒步》方法篇

时间:2023-04-25 15:25:23浏览次数:47  
标签:tmp 10 int void c++ a1 徒步 b1 方法

按值传递和按地址传递

参考链接:https://blog.csdn.net/scrence/article/details/79835572
参考链接:https://www.jb51.net/article/250343.htm
1、按值传递

#include<iostream>
using namespace std;
void changeNumber(int x);
int main(void)
{
	int a = 10;
	cout << "a = " << a << endl;
	changeNumber(a);
	cout << "Now a = " << a << endl;
	return 0;
}
void changeNumber(int x)
{
	x = x + 5;
}

其中a的值不变化,输出两次都为10。
原理是调用方法时,会重新找一块内存空间复制a,这个空间就是x,所以对x任何操作不会影响a。
2、按地址传递(指针参数)

#include<iostream>
using namespace std;
void changeNumber(int* x);
int main(void)
{
	int a = 10;
	cout << "a = " << a << endl;
	changeNumber(&a);
	cout << "Now a = " << a << endl;
	return 0;
}
void changeNumber(int* x)
{
	*x = *x + 5;
}

其中a的值变化,第一次为10,第二次为15
原理是changeNumber(int* x)声明中的int* 指参数地址,所以在调用时,使用&a取其地址,把地址传给方法中的x,这里x和a存的就是地址,并且地址相同,对x操作会影响到a。

3、按引用传递
什么是引用?引用就是给已有的变量取个别名。

// 引用必须在定义时就初始化,初始化后不能修改
int num=10;
int &a = num;// 其中a就是num的别名
// 下面这种就会报错
// int &b;
// b = num;
// 下面这种就会报错
// int count = 10;
// a = count;

按引用传递

void swap_int01(int a1, int b1)
{
	int tmp  = a1;
	a1 = b1;
	b1 = tmp;
}
void swap_int02(int *a1, int *b1)//a1=&a, b1=&b
{
	//*a1 == a, *b1 == b
	int tmp  = *a1;
	*a1 = *b1;
	*b1 = tmp;
}
void swap_int03(int &a1, int &b1)//int &a1 = a, int &b1=b
{
	//a1 == a, b1 == b
	int tmp  = a1;
	a1 = b1;
	b1 = tmp;
}
void test07()
{
	int a = 10;
	int b = 20;
	cout<<"a = "<<a<<", b = "<<b<<endl;
//    swap_int01(a, b);//交换 不成功
//    swap_int02(&a, &b);//交换 成功
	 swap_int03(a, b);//交换 成功
	cout<<"a = "<<a<<", b = "<<b<<endl;
}
int main(int argc, char *argv[])
{
	test07();
	return 0;
}

其中交换成功,是因为swap_int03(int &a1, int &b1)中int& 是声明引用,传入a后,a1就是a的别名,对a1操作会影响a。

标签:tmp,10,int,void,c++,a1,徒步,b1,方法
From: https://www.cnblogs.com/fusio/p/17352685.html

相关文章

  • Element UI 中 el-input 按下回车键会刷新页面的原因及解决方法
    【问题描述】在需求开发的过程中遇到了一个奇怪的问题:点击弹窗开启表单,分明没有添加任何键盘事件,但在按下回车键时会让页面自动刷新,因此影响到了其他功能。 【产生原因】查阅资料后得知,当el-form表单里只有一个 el-input时,按下回车建会自动触发页面提交功能,因此导致了页......
  • C++ shared_ptr 虚析构函数 特殊
    classa{public:~a(){cout<<"a"<<endl;}classb:publica{public:~b(){cout<<"b"<<endl;}voidmain(){shared_ptrA;{shared_ptrB(newb());//智能指针内部,uses引用值为1A=B;//智能指针内部,uses引用值为2,子类父类的智能指针可以一起计数}//离开作用......
  • SNMPV3监控华为设备只能监控到部分数据的解决方法
    最近在做Zabbix监控二次开发的一个项目,需要用到snmp监控被管设备的各种信息,比如风扇状态等PS:本项目之前配置的都是SNMPV3协议(即需要加密的snmp)经华为资料得到它们的MIB库(一个snmp协议的oid集合),发现并不能根据他给的oid获取数据于是用snmpWalk爬取所有数据,发现只能爬到一部分,并......
  • 【面试宝典】C/C++ 基础
    一.语言基础 数组和指针的区别 数组指针概念是用于储存多个相同类型数据的集合。 数组名是首元素的地址特殊的变量,存放的是其它变量在内存中的地址。 指针名指向了内存的首地址赋值只能一个一个元素的赋值或拷贝同类型指针变量可以相互赋值存放方式连续......
  • Nginx配置跳转HTTPS方法汇总
    1、采用nginx的rewrite方法#server{listen80;server_namedev.herlly.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;rewrite^(.*)$......
  • mybatis-plus只查询部分字段的两种方法
    方法1:只需要查询出name和phone两个字段:使用queryWrapper的select()方法指定要查询的字段publicListselectByWrapper1(){ QueryWrapperqueryWrapper=newQueryWrapper<>(); queryWrapper.select("username");//指定查询某字段 ListsysUsers=sysUserService.list(queryWr......
  • 微服务相关组件的启动方法
    目录Redis实现微服务保护sentinelseatanacosapache-jmeterdockerRabbitMQelasticsearchkibana本篇文章是记录微服务相关组件的启动方法,安装流程可以百度查看网上博主文章,随便找一篇问题都不大,本文主要是因为运行的有点特殊,特意记录下来,日后忘记回来找笔记,都是在已经安装配置的基......
  • Effective C++总结
    1.视C++为一个语言联邦c++是C、面向对象C++、泛型编程、以及stl的集合。2.尽量以const\enum\inline替换#define3.尽可能使用const4.确定对象使用前已经被初始化5.了解C++默认生成并调用哪些函数7.为多态基类声明virtual析构函数8.别让异常逃离析构函数9.绝不在构造和析构过程中调......
  • Vulnhub之Hacksudo Search靶机详细测试过程(不同提权方法)
    HacksudoSearch识别目标主机IP地址(kali㉿kali)-[~/Desktop/Vulnhub/HacksudoSearch]└─$sudonetdiscover-ieth1-r192.168.56.0/24Currentlyscanning:192.168.56.0/24|ScreenView:UniqueHosts......
  • C++STL学习经典
    C++语言学习之STL的组成STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(containeradaptor),函数对象(functor),除此之外还有STL其他标准组件。通俗的讲:容器:装东西的东西,装水的杯子,装咸水的大海,装人的教室……STL里的容器是可容纳一些数据的模板类。算法:......