指针和引用
- 1.初始化规则
- 2.面试题 :引用和指针的区别是什么
- 3.引用使用场景
- 4.拓展 为什么C+支持引用而C没有
1.初始化规则
- 指针和引用在初始化方面有不同的规则:
- 指针的初始化规则:
直接初始化:可以将指针初始化为指向特定变量或内存地址。例如:int* ptr = &myVariable;空指针初始化:可以将指针初始化为空指针,表示它不指向任何有效的内存地址。例如:int* ptr = nullptr; 或 int* ptr = NULL;野指针初始化:应避免将指针初始化为未初始化的值,因为它可能指向未知的内存地址。
- 引用的初始化规则:
引用必须在定义时进行初始化,并且不能在后续的代码中重新绑定到另一个对象。例如:int x = 5; int& ref = x;引用必须绑定到一个已经存在的对象,而不能绑定到字面量或表达式。例如:int& ref = x; 是有效的,而 int& ref = 5; 是不允许的。
引用在初始化后成为所绑定对象的别名,对引用的操作实际上是对所绑定对象的操作。
3. 需要注意的是,指针和引用在其用法和语义上有一些差异。指针可以重新赋值指向不同的对象,而引用在初始化后不能重新绑定到其他对象。此外,指针可以为空,而引用必须绑定到一个已存在的对象。在选择使用指针还是引用时,需要考虑到具体的需求和语义要求。
看下面这代码:
using namespace std;
#include<iostream>
//指针和引用
void test1()
{
char* pc = 0;
char& rc = *pc;
cout << rc << endl;
}
int main()
{
test1();
return 0;
}
上面这段代码 初始化的时候让指针赋值为空 而rc为空指针的引用 下面是vs和linux下的运行结果
在编译时都能通过 运行的时候就出现了异常!!
2.面试题 :引用和指针的区别是什么
引用和指针的区别如下:
-
指针是个地址需要存放在内存而引用并不占据额外的存储空间,它只是给已经存在的对象起了一个别名。并不独立占据空间
-
初始化:引用必须在定义时进行初始化,并且一旦初始化后,它将一直引用同一个对象,无法改变引用的目标。指针可以在定义后不进行初始化,也可以在任何时候指向不同的对象。
-
空值:引用不能为null或空值,必须始终引用一个有效的对象。指针可以为null或空指针,表示不引用任何对象。
-
语法:引用使用&符号声明,指针使用符号声明。在使用引用时,无需使用解引用操作符来访问对象的值。
3.引用使用场景
- 参数传递:通过引用可以在函数间传递参数,并实现对参数的修改,而无需进行拷贝操作。
- 返回值:函数可以返回引用类型,使得函数的返回值可以被赋值给其他变量,并直接修改原始对象。
- 遍历和修改容器:在遍历容器或修改容器元素时,使用引用可以提高效率并简化代码。
- 防止拷贝:通过使用常量引用作为函数参数或类成员,可以避免不必要的拷贝操作,提高性能。
4.拓展 为什么C+支持引用而C没有
-
C语言是在20世纪70年代早期开发的,它的设计目标是作为低级别的系统编程语言。C语言的设计哲学是简洁、高效和可移植,注重对硬件的直接控制和低级别的操作。在当时的计算机硬件和编程环境下,指针是一种更为灵活和强大的机制,可以满足对内存和底层资源的直接访问需求。因此,C语言选择了指针作为主要的间接访问机制,而没有引入引用。
-
后来,C++语言作为C的扩展,引入了许多新特性,其中包括引用。C++语言的设计目标是在保留C的效率和底层控制能力的同时,提供更高级别的抽象和面向对象的特性。引用是其中的一个特性,它可以提供更直观、简洁的语法来创建别名,并支持更自然的对象操作和传递。引用还可以用于实现更安全的代码,例如在函数参数传递中避免了空指针的问题。
-
引用的引入是C++语言的一个重要特性,它使得代码更易于阅读、编写和理解。然而,引用也增加了语言的复杂性和额外的开销,因此在设计C语言时,为了保持简洁和效率,没有引入引用。
创作不易 点赞支持 都进大厂~