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

C++ 引用变量(十二)-- & b *b和C的传递指针形参一样效果

2016-09-05 16:25 288 查看
#include <iostream>
#include <string>
using namespace std;

//引用用于类对象
string gestString(const string &s1 , const string &s2)
{

//创建临时变量
string temp;
//字符串拼接
temp = s2 + s1 + s2;

return temp;//注:如果是返回引用 &,不允许使用临时变量,这样导致引用指向一个已销毁的内存地址;

}

//引用用于结构体
struct tree {
int t;
int f;
long k;
};

void gestStruct(tree &g)
{
//临时拷贝
g.t = 100;
}

//普通函数形参为引用
void gest2(int g)
{
//两个变量,两个名称, 不可影响传入变量的原始值
g = 9999;
}

void gest(int &g)
{
//一个变量,两个名称, 直接关联传入变量值
g = 100;
}

void gestPoint(int *g)
{
//指针地址一样,直接关联传入变量值
int i = 200;
*g = i;
}

int gestConst(int const &g)
{
//引用参数为 const可以只使用,不改变
return g*g;
}

int main(int argc, const char * argv[]) {

int a = 10;

//1、以下等价,b、bb内存地址和a是一样
int & b = a;
int &c = a;
// int & f; //错误语法,初始化时必须赋值
int *const bb = &a; //说明引用变量其实是对a的指针和值复制,只能在初始化时设置,更接近于const指针,只能效忠于a

a = 20; //当引用变量或被引用的值发生改变,所有对象值都改变

int t = 20;
b = t;

//2、作为函数形参传递引用
cout << "传值前的 t = " << t << endl;
gest(t);
cout << "传值给引用函数后的 t = " << t << endl;
/**
打印:(可改变)
传值前的 t = 20
传值给引用函数后的 t = 100
*/

//3、作用:函数内部改变引用变量的值;
//如果需要对函数的实参要求改变后,值也跟着改变,那么值传递都不起作用
//示例:几种和引用对比
gestPoint(&t);
cout << "指针传值后的 t = " << t << endl;
/**
打印:(可改变)
传值给引用函数后的 t = 200
*/

gest2(t);
cout << "值传递后的 t = " << t << endl;
/**
打印:(不可变)
传值给引用函数后的 t = 200
*/

gestConst(t);
cout << "const值传递后的 t = " << t << endl;
/**
打印:(不可变)
const值传递后的 t = 200
*/

tree tr1 = {1,2,3};
gestStruct(tr1);
cout << "传入结构引用后" << tr1.t << endl;
/**
打印:
传入结构引用后100
*/

tree tr2 = {44,122,5678};

//4、将引用用于类对象
string input;
string copy;
string result;
copy = gestString(input,"sdff"); //string 可以接受 char * 类型字符串,内部实现转换

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: