C++指针和引用

简介:  指针    指针是用来操纵地址的特殊类型变量,它可以作为函数参数来传递数组变量,也可以用来访问和操作内存空间。      在指针中,有两种特殊运算符:& 和 *;其中,&运算符是用来去地址的,而*运算符则是用来取值和声明指针的。

 指针

   指针是用来操纵地址的特殊类型变量,它可以作为函数参数来传递数组变量,也可以用来访问和操作内存空间。

     在指针中,有两种特殊运算符:& 和 *;其中,&运算符是用来去地址的,而*运算符则是用来取值和声明指针的。

   指针的声明和使用:

 

	int*p;	//声明一个int 型指针
	int x=37;
	p=&x; //p为x变量的地址

   从指针的使用来看,指针指向了一个变量,于是,在对变量的值进行操作时,我们有了两种思路:一是直接改变变量的值;二是通过指针来间接改变变量的值。在对单个变量进行运算时,这两种方法看似相同,但是在对数组进行运算时,即处理大数据量时,指针运算就比数组运算快了,这时,指针的优势就显示了出来。

  以前在学习VB的时候,是把数组和循环放在一起学习的,一般处理非常小的问题是不用数组和循环的,但是,当碰到需要重复处理的大的数据量的时候,就要用到数组和循环,在C++里面,提供了指针,用指针加上循环,处理起来会更快,所以,指针和数组在使用中,也具有密不可分的联系。

    虽然指针有诸多好处,但是,也是存在漏洞的:比如,指针的悬挂问题:即两个指针指向一个空间,一个指针所指向的空间被删除,另一个指针所指向的空间也就被删除了。例如:

#include<iostream>
#include<cstring>
using namespace std;
void suspension(char * s);

void suspension(char * s)
{
	cout<<s<<endl;  //输出指针所指区域的内容
	delete s;   //释放指针所指空间

}

int main()
{
	char * p;
	p=new char[100];     //声明p所指空间的大小
	strcpy(p,"c++ language");    //在p所指向的空间内放入字符
	suspension(p);          //输出p所指内容,并且同时释放形参s指向的内存空间
	cout<<p<<endl;           //输出指针p所指的内容,但是因为此区域已被释放,所以出现了指针悬空问题
	return 0; 

}

如上,p和s同时指向一个空间,当s指向的空间内容被释放了,p就成了空指针,造成了指针悬空的问题。


引用

   引用是个别名。就像以前使用API函数一样,因为名字太长了,给它重新起个好用的名字。

  

例如:

Int i=1;

Int&r=I;

此处r初始化为对i的引用。在此,要求i已经声明或定义,而引用仅仅是它的别名。

建立时需用一个数据对象的名字进行初始化,以指定该引用所代表的的数据对象。此后,对引用的任何操作实际上就是对所代表的数据对象的操作。系统不会为引用再次分配存储空间。


引用示例:


 

引用和指针

       1,创建指针的时候,可以不初始化,但是创建引用的时候,要立即对其初始化。

         2,指针则可以在任何时候改变为指向另一个对象,但是,一旦一个引用被初始化为一个对象的引用,它就不能再被改变为另一个对象的引用,从这种程度上看,引用像是静态变量,一旦被赋值,程序运行中不可改变,但是指针像动态变量,一有需要,可以随时改变。

       3,引用和一块合法的存储空间关联,即:不可能有NULL引用。必须确保引用是对具体合法的对象的引用

       4,如果有占用空间大的对象需要作为函数参数传递的时候,在C中往往使用指针,而在C++中,既可以使用指针,也可以使用引用。引用作为参数的最大好处是可以像指针那样工作,其使用方式又和一般变量相同。所以,引用比指针有更好的可读性。

     ,



目录
相关文章
|
16天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
1月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
33 1
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
24 2
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
2月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
36 3
|
1月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`-&gt;`运算符,可以方便地访问和操作智能指针所指向的对象。
|
2月前
|
C++
C++(九)this指针
`this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this-&gt;name`和`this-&gt;age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。