0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么使用指针?C++中的“指针”

SwM2_ChinaAET 来源:未知 作者:李倩 2018-10-04 10:33 次阅读

指针是用来保存内存地址的变量。每个被定义的变量都有自己的地址,可以用指针来存放任何被定义的变量的地址。如(p存放的是变量的地址,*p存放的是变量的数据。):

inta;//定义一个整型变量a int*p;//定义一个指向整型变量的指针p p=&a;//将变量a的地址赋给变量p

定义一个指针后一定要用它保存一个内存地址,如果不那么做的话,那么该指针就是一个失控指针,它可以指向任何地址,并且对该地址的数值进行修改或者删除,可能会造成意想不到的后果。所以,可以将指针初始化为0,如:

int*p;p=0;或者int*p=0;

由于不同类型的变量在内存中所占用的字节不同,而指针又是用来保存内存地址的变量,因此指针只能存储与它类型相同的变量的地址。

注意区分指针地址、指针保存的地址和该地址的值,如:

inta=1; int*p=&a; cout<< "指针地址:" << &p << endl; cout << "指针保存的地址:" << p << endl; cout << "指针保存地址的数值:" << *p << endl;

为什么使用指针?因为在操作大型数据和类时,指针可以通过内存地址直接访问数据,可避免在程序中复制大量的代码,因此指针的效率最高。一般来说,指针会有3大用途:

(1)处理堆中存放的大型数据;

(2)快速访问类的成员数据和函数;

(3)以别名的方式向函数传递参数

如何使用堆?首先创建一个堆,然后定义一个指向该堆的指针,最后通过该指针就可以访问堆中的数据。在C++中使用关键字new创建一个堆并分配内存,在new后面跟一个要分配的对象类型,编译器根据这个类型来分配内存。如:

int*p;p=newint;或int*p=newint;//分配了四个字节的内存空间

由于使用new创建的内存空间不会被系统自动释放,因此假如不去释放它,那么该区域的内存将始终不能为其他数据所使用,而指向该内存的指针是个局部变量,当定义该指针的函数结束并返回时,指针也就消失了,从而再也找不到这块内存区域,这种情况叫做内存泄漏。因此,当不需要一块内存空间,可以使用关键字delete释放该内存空间(不要再次对该指针进行删除,因为它所指向的内存区域已经被释放,如果再进行释放,将会使程序崩溃。但是,如果将该指针赋为0的话,那么删除一个指针是安全的。),但不会释放该指针,指针可以继续使用。另外,当用delete释放一个指针所指向的空间后,最好将该指针的内存地址清0。如:

int*p=newint; deletep; p=0;

还可以在堆中创建对象(创建对象时会自动调用类的构造函数来初始化对象的成员数据),如下,定义了一个Human类的指针p,指向new创建的内存空间。占用内存大小由Human类对象的成员变量来决定。

Human*p;p=newHuman;或Human*p=newHuman;

如果要删除在堆中创建的对象,可以直接删除指向该对象的指针,这样会自动调用对象的析构函数来销毁该对象,同时释放内存。

可以通过指针变量访问堆中创建的对象,如下,其中->是成员指针运算符,利用该符号可以实现读取对象的内存地址并且访问该对象的成员的作用。

(*p).get();或p->get();

指针可以进行加减操作,如下,定义了一个指针并指向int型变量,执行加1操作,会将原来的内存地址增加4个字节;执行减1操作,会将原来的内存地址减少4个字节。

int*p=newint; p++; p--;

常量指针是指该指针不可改变,但其指向的数据可改变,如下:

int*constp;

指向常量的指针是指该指针可改变,但其指向的数据不可改变,如下:

constint*p;

指向常量的常指针是指该指针不可变,其指向的数据也不可变,如下:

constint*constp;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    479

    浏览量

    70506
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73480
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043

原文标题:【博文连载】C++中的“指针”

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浅谈C/C++里的指针

    指针CC++的难点和重点。指针C的灵魂。我不想重复大多数书上说得很清楚的东西,只是把我看
    发表于 06-28 10:21 393次阅读

    关于C++函数指针的使用

    关于C++函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。 //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); c
    发表于 07-13 03:51

    C指针_CC++经典著作

    C指针_CC++经典著作,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-16 18:32 0次下载

    C++实验--指针

    C++实验--指针
    发表于 12-30 14:50 1次下载

    C++指针”学习建议

    C++指针”学习建议
    发表于 03-31 15:53 3次下载

    C指针习题答案配C指针

    C指针习题答案配C指针
    发表于 09-07 14:29 6次下载
    <b class='flag-5'>C</b>和<b class='flag-5'>指针</b>习题答案配<b class='flag-5'>C</b>和<b class='flag-5'>指针</b>

    C++程序设计教程之指针的详细资料说明

    本文档详细介绍的是C++程序设计教程之指针的详细资料说明主要内容包括了:1. 指针的概念,2. 变量与指针,3. 数组与指针,4. 字符串与
    发表于 03-14 16:04 7次下载
    <b class='flag-5'>C++</b>程序设计教程之<b class='flag-5'>指针</b>的详细资料说明

    C++指针的学习建议

     一。对于众多人提出的c/c++指针难学的问题做个总结:
    发表于 11-07 17:13 8次下载
    <b class='flag-5'>C++</b><b class='flag-5'>指针</b>的学习建议

    C++封装:this指针

    C++封装:this指针
    的头像 发表于 06-29 14:37 3446次阅读
    <b class='flag-5'>C++</b>封装:this<b class='flag-5'>指针</b>

    C++const以及this指针的使用

    const 作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer); 修饰
    的头像 发表于 09-23 11:39 1979次阅读

    CC++经典著作《C指针

    CC++经典著作《C指针
    发表于 01-17 09:46 0次下载

    C语言中的悬空指针和野指针是什么意思?

    提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针的两个特有名词
    的头像 发表于 02-09 17:20 1063次阅读

    C++中有函数指针还需要std::function嘛

    C/C++可以使用指针指向一段代码,这个指针就叫函数指针,假设有这样一段代码:
    的头像 发表于 02-15 14:13 483次阅读
    <b class='flag-5'>C++</b>中有函数<b class='flag-5'>指针</b>还需要std::function嘛

    C++的引用和指针

    之前的文章我们已经介绍了C++的基本类型如int,bool和double等,除了基本类型C++还有一些更复杂的数据类型复合类型,所谓的复合类型就是通过其他类型定义的类型,本篇文章我们将会着重介绍
    的头像 发表于 03-17 14:00 603次阅读

    C++智能指针的底层实现原理

    C++智能指针的头文件: #include 1. shared_ptr: 智能指针从本质上来说是一个模板类,用类实现对指针对象的管理。 template class shared_pt
    的头像 发表于 11-09 14:32 703次阅读
    <b class='flag-5'>C++</b>智能<b class='flag-5'>指针</b>的底层实现原理