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

20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值

2017-01-11 17:19 351 查看

引用/指针

1:指针的缺陷是把其他数据类型改为了指针类型,引用最大的优势是使我们的状态得以保存。引用可以看成一个阉割版的指针!

2:引用加上&符号,使用引用的时候不能像指针那样赋值为nullptr,引用必须要指向一个变量。引用就是变量的别名,他是没有独立空间的!引用但凡确定之后,他的值是无法修改的。之后对引用的任何操作都是作用与引用原来的变量上。

3:指针拥有独立的空间,空间里面存储的指向的地址,指向某一个变量,指针这种是弱关联,弱关联(指向的变量可以修改),引用是强关联,他是绑定了的,无法修改(无法把这个别名给另一变量)!

eg:
int val = 100;
int num = 20;
int &refval = val;
refval = num;//正确的,相当于给val 赋值!
&refval = num;;//这个语句是错误的!右边为int,左边为地址,而求地址无法被赋值,只有地址里面的存储空间可以被赋值。
&refval = &num//也是错误的,左操作数必须为左值(可修改)。


对refval的任何操作都作用于val上,可以使用引用传递参数

void Swap(int &lhs, int &rhs)
{
int temp = lhs;
lhs = rhs;
rhs = temp;
}
这个函数可以实现两个整形数的交换,而且没有想指针那样,类型被修改了。

引用两边类型必须要一样!不可以  char &refval = val;//(val为整形)。

const int &refval = val;//这个是错误的(老师说的,但我编译可以通过,但是只能通过val来修改内存中的值,refval不能拿来修改值)!
//const引用指向的是const类型,const类型的数必须只能用const的引用(常量引用)。
const int *pval = &val;//pval值无法修改,const是左结合(优先和左边的结合),左边是什么就是什么不能变!是指针就是地址不能变。
int const *pval = &val;//值无法修改
int *const pval = &val;//地址无法修改
val的值无法再修改!


按引用传递/引用作为返回值:

1:Swap(val,num);//看起来传了一个变量进去,实际上还是相当于地址,但函数里面使用还是想使用变量一样的使用引用,里面可以进行各种各样的操作!相当于把自己传递进去了!平时都是使用指针这样操作,但引用更方便理解!引用的主要意义在于参数的传递!

2:如果想通过引用来传递参数,当你不希望函数里面修改引用的值,可以在传递的参数前面加const,这样参数就不能在这个函数里面修改,但在原来的作用域还是可以被修改的。

void Swap(const int &lhs, const int &rhs)
{
int temp = lhs;
lhs = rhs;//这里和下面一排编译就不可以通过(error C3892: “lhs”: 不能给常量赋值)
rhs = temp;//
}


3:函数返回值也可以是引用!
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int &Index(int index)
{
return array[index];
}
int main()
{
Index(0) = 100;
std::cout << array[0];
return 0;
}

4:引用无法完全代替指针,因为引用无法指向堆空间!也永远不要那指针来取其引用(用的时候还是要加*),这样难度会提升,而且无意义!
5:引用后面必须是一个变量,不能int &val = 100;//他会在常量区分配一个空间,但毫无意义!最好不要这样用!!
6:auto:C++里面全新的概念,他会自动推导所需的类型!这种自动推导容易出问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: