page contents

C++指针是如何快速查找数据,简化编程任务的呢

学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的

attachments-2021-08-LphN3Dkd611c73050c953.png

前言

学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。


一.什么是指针

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。它将告诉你程序在内存的哪块区域,从而使它能够快速的查找数据。

这是一个非常重要的概念,有很多程序和算法都是围绕指针设计的,如链表、遍历等。

 

二.定义指针对象

定义指针变量时,在变量名前写一个 * 星号,这个变量就变成了对应变量类型的指针变量。必要时要加( ) 来避免优先级的问题:

attachments-2021-08-2ZFX1UfE611c72cfd9979.png

 

三、C++指针详解

C++ 中,有很多指针相关的概念,这些概念都很简单,但是都很重要。下面列出了 C++ 程序员必须清楚的一些与指针相关的重要概念:

attachments-2021-08-JSmlvT8L611c72dc24d54.png 

四、指针赋值及转换

a.同类型直接赋值,异类型要进行转换。

b.强制转换:可以把表达式结果硬性转换为指定类型

c.char * p;(int *)p p强制转换为int型,记住转换过程中要注意两个类型的大小,大转小时可能会有数据丢失(如intdouble

d.涉及void *:

c void *类型可赋值给任何类型的指针,反之亦然

c++ 中都需要强制转换

void * 可看作无穷大能接纳任何类型赋值,反之不行int * p =9;void * t= p(正确);p=t(错误)

e.不涉及void *的都要强制转换


 

五.指针和数组

不带下标的数组名返回数组的起始地址,即数组首元素的地址,所以对数组的访问可有两种方式:数组下标和指针算术。例如:

char* pChar; char chs[100]; pChar = chs;

这样pChar就指向chs数组的首地址。

 

六.数组与引用

a.引用只是变量的别名,而不是指向变量的指针(区别于取址运算符"&")不占内存空间,对变量引用的改变其相应的变量也会改变。

b.不能对引用使用指针间接运算符“*”进行复引用操作

c.引用必须在声明时初始化 int &c = count;(ccount的别名)

 

七.指针空间的动态分配与回收

动态分配是指针的关键技术。它是用来在不必定义变量的情况下分配内存和让指针去指向它们。分配了内存,别忘了回收。你动态地分配了一个内存空间,可它绝不会被自动删除。

也就是说,这块内存空间会一直存在,直到你告诉电脑你已经使用完了。可结果是,你并没有告诉电脑你已不再需要这块内存空间了,所以它会继续占据着内存空间造成浪费,甚至你的程序运行完毕,其它程序运行时它还存在。当这样的问题积累到一定程度,最终将导致系统崩溃。所以这是很重要的,在你用完它以后,请释放它的空间。

 

八.实际使用指针时,容易出现的错误

1.指针未初始化。

指针的初始化,不是指指针的定义,而是指针变量存储的数值是个无效的数值。比如定义float a;这个a会分配一个地址,但初始值是一个乱七八糟的数据。同样,float *a;也会为a分配一个地址,初始值也是乱七八糟的数据。初始化可以将a = NULL,这样在以后的程序中可以增加if(a == NULL)来判断指针是否有效,否则不行。或者为指针分配或者指定空间。如

float *a = new float; 或者 float b; float *a = &b

都可以为指针指向一块内存以实现初始化。

2.指针越界

指针越界是个比较难以捕捉的错误。如果测试不全面,不容易被发现。对于为指针分配的空间大小,程序员一定要时刻注意。

3.指向局部变量的指针

指针是记录某块内存起始地址的变量,要使指针有效,则必须确保这块内存有效。用new分配的内存空间,只要不delete,则一直有效。但是对于指向某个变量地址的指针,程序员必须清楚该变量的作用域。如果离开了变量的作用域,该变量的内存空间就会被系统自动回收,再使用指针时,将会发生错误。这是程序中最容易出现的错误。

4.指针指向的转移

有些初涉C++的程序员,常常会写出这样的程序:

char *pChar = new char; char chs; pChar = &chs; delete pChar;

他们的目的是想将chs内容传递给pChar指针指向的内存。但这样写,将会使pChar先前指向的空间编程垃圾地址,因为地址无法再获取了。俗称野指针。将会导致内存泄漏。而且,在调用delete pChar时,也会发生异常错误。因为不是new的空间是不能使用delete删除的。因为pChar已经转到指向chs这个变量的地址了。

指针的艺术远不止这些,留待我们的爱好者进行深入的探讨。指针给我们的程序带来了太多的方便,同样,它也有很多难以控制的问题。如何更好的驾驭指针,可以说是C++程序员提高自己的一个手段。


 

以上就是有关C++指针是如何快速查找数据的相关内容了,想要了解更多有关c++的其它知识也可关注六星社区网站。 

  • 发表于 2021-08-18 10:40
  • 阅读 ( 587 )
  • 分类:C/C++开发

0 条评论

请先 登录 后评论
小柒
小柒

1474 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章