您的位置:首页 > 编程语言 > C语言/C++

学习笔记:探究C++中的指针、引用

2020-01-13 23:38 148 查看

引用(可以用作别名):

int a=1;
int& b=a;
/*注意
1:b改变a也变
b=2;
cout<<b<<a<<endl;
输出22
2:必须初始化
不能int& b;
3:不能直接引用常量
int& b=2;
而应该const int& b=2;

先来段简单的代码:
change1:普通的调用
change2:指针
change3:引用

#include <iostream>
using namespace std;
void change1(int,int);
void change2(int*,int*);//指针
void change3(int&,int&);//引用
int main()
{
int a=1,b=2;
cout<<"初始值1:"<<"a="<<a<<",b="<<b<<endl;
change1(a,b);
cout<<"主1:"<<"a="<<a<<",b="<<b<<endl;
int c=3,d=4;
cout<<"初始值2:"<<"c="<<c<<",d="<<d<<endl;
change2(&c,&d);
cout<<"主2:"<<"c="<<c<<",d="<<d<<endl;
int e=5,f=6;
cout<<"初始值3:"<<"e="<<e<<",f="<<f<<endl;
change3(e,f);
cout<<"主3:"<<"e="<<e<<",f="<<f<<endl;
}
void change1(int a,int b)
{
int c;
c=a;
a=b;
b=c;
cout<<"change1:"<<"a="<<a<<",b="<<b<<endl;
}
void change2(int* a,int* b)
{
int c;
c=* a;
* a=* b;
* b=c;
cout<<"change2*:"<<"*a="<<*a<<",*b="<<*b<<endl;
cout<<"change2:"<<"a="<<a<<",b="<<b<<endl;
}
void change3(int& a,int& b)
{
int c;
c=a;
a=b;
b=c;
cout<<"change3:"<<"a="<<a<<",b="<<b<<endl;
}

输出结果:

初始值1:a=1,b=2
change1:a=2,b=1
主1:a=1,b=2
//副本里改变,但是不影响主程序里
初始值2:c=3,d=4
change2*:*a=4,*b=3
change2:a=0x6afee4,b=0x6afee0
主2:c=4,d=3

初始值3:e=5,f=6
change3:a=6,b=5
主3:e=6,f=5
//通过结果可以发现2和3有异曲同工之妙,但是我个人感觉3书写更加简单快捷

指针的改变:

using namespace std;
void change2(int*,int*);
int main()
{
int c=1,d=2;
cout<<"初始值2:"<<"c="<<c<<",d="<<d<<endl;
change2(&c,&d);
cout<<"主2:"<<"c="<<c<<",d="<<d<<endl;
//主2:c=2,d=2
}

void change2(int* c,int* d)
{
* c=* c+ 1;
d + = 1;
cout<<"change2*:"<<"*c="<<*c<<",*d="<<*d<<endl;
//change2*:*c=2,*d=2
cout<<"change2:"<<"c="<<c<<",d="<<d<<endl;
//change2:c=0x6afeec,d=0x6afeec
}

引用的改变:

#include <iostream>
using namespace std;
void change3(int&);
int main()
{
int e=1;
cout<<"初始值3:"<<"e="<<e<<endl;
change3(e);
cout<<"主3:"<<"e="<<e<<endl;
//主3:e=2
}
void change3(int& e)
{
e+=1;
cout<<"change3:"<<"e="<<e<<endl;
//change3:e=2
}
//感觉引用很容易修改数据的值,name用const可以解决吗?Yes
  • 点赞
  • 收藏
  • 分享
  • 文章举报
该死的碳酸饮料呀 发布了18 篇原创文章 · 获赞 0 · 访问量 185 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: