引用和指针的宏观比对—引用和指针(一)

目录

 

一般性变量引用的关键规则

参数引用的常见错误

引用和指针的区别是什么?

引用为什么比指针安全?


一般性变量引用的关键规则

  • 引用类型的变量在声明的同时必须初始化
  • 引用只能在声明的时候被赋值,且以后都不能再把该引用名作为其他变量的引用名

  • 没有初始化的指针变量就是野指针

参数引用的常见错误

对于常量类型的变量,其引用必须是常量类型的,对于非常量类型的变量,其引用可以是常量类型的,也可以是非常量类型的。但无论什么情况,都不能使用常量引用去修改引用的变量的值。

#include <stdio.h>
#include <iostream>

int main()
{
	const int a = 10;
	//int &b = a; 报错,不能用一个非常量的引用去引用一个常量
	const int &b = a;
	int c = 4;
	const int &d = c;//可以用一个常量去引用一个非常量的变量

	//b++; //只要常量引用,就不能用其修改被引用的值
	//d++;
	//a++;
	c++;//这个是被常量引用引用的变量,可以修改值

	printf("c:%d\n", c);
	printf("d:%d\n", c);
	system("pause");
	return 0;
}

运行如下: 

引用和指针的区别是什么?

  1. 初始化的要求不同:引用在创建的时候必须被初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,在之后的任何地方都可以重新赋值,但是,在使用这个指针前,必须初始化完成。 
  2. 可修改性不同:引用一旦被初始化指定一个对象后,就不能更改为另一个变量的引用了,而指针可以,更改指向的变量。
  3. 不存在NULL引用:存在NULL的指针,但不存在引用为NULL值的引用。所以,引用必须依靠具体的变量,对象而活,而指针可以不依靠它们任何而存在。
  4. 应用的区别:一旦指向一个对象后就不打算更改指向了,那就该用引用;如果存在指向NULL,想在不同时刻更改不同的指向对象,就需要用到指针。

总结:语言层面上,引用的用法和对象一样;二进制层面上,引用也是通过指针来实现的,只不过编译器帮我们完成了转换。总体来说,引用既具有指针的效率,也有变量使用的方便性和直观性。

引用为什么比指针安全?

引用不存在为空,一旦引用必定绑定一个具体对象,且不可更改。

指针就显的不太"专一",不仅可以跟更改所指向的对象,甚至可以为空,相对来说更不安全。

发布了271 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_17846375/article/details/104945098