指针:是说指针名表示的是地址。是一个变量,存储的是值的地址,而不是值本身

*运算符被称为间接值或解除引用运算符也可以叫做取地址符

声明一个指针

int * p_data;

* p_data的类型为int 由于*运算符被用于指针,因此p_data变量本身必须是指针。

我们说p_data指向int类型,我们还说P_data的类型是指向int的指针,或int*

可以这样说p_data是指针(地 址),而*p_data是int,而不是指针

初始化指针

int value=1;

int * pt=&value;

&的作用就是取变量的地址

初始化指针就是把pt的值设置为&value,

输出

cout<<"value"<<value<<endl;

cout<<"*pt"<<*pt<<endl;

cout<<"&value"<<&value<<endl;

cout<<"pt"<<pt<<endl;

你就会发现pt和&value是一样的

*pt和value 是一样的

一般如果只是声明一个指针,可以把指针初始化等于0的指针指针为nullptr不指向任何对象

int* myValue(nullptr);

nullptr可以隐式转换为bool类型

可以这么判断

if(!myValue)

  ........

-----------------------------------------------------------------------------------

用new 来分配内存,程序员要告诉new 需要为哪种数据类型分配内存,new 将找到一个长度正确

的内存块,并返回该内存的地址。

int *pt =new int;

new int 告诉程序,需要适合存储Int的内存。new运算符根据类型来确定需要多少字节的内存。

然后找到这样的内存并返回地址,再把地址赋值给pt,pt被声明为指向int的指针

现在pt是地址,*pt是指向该内存的值

使用完内存后我们就要把内存归还给内存池,这就用到了delete

使用delete时要加上指向内存块的指针

int * pt=new int;

delete pt;

一定要配对的使用new 和delete,也不能释放已经释放完的内存块

也不能向下面这样释放声明变量所得的内存

int value=1;

int * pt=&value;

delete pt;//这样做是不对的

下面说一下指针创建数组

int * pt =new int[10];

new 运算符返回的是第一个元素的地址,用完后我们要用delete释放它们

delete [] pt;//[] 告诉程序应释放整个数组,而不是仅仅是指针指向的元素

使用new 和delete时,应遵守以下规则

1.不要用delete 来释放不是new分配的内存

2.不用使用delete来释放同一个内存块两次

3.如果使用new[] 为数组分配内存,则应使用delete[]释放

4.如果用new为一个实体分配内存,则应使用delete(没有[])来释放

5.对于空指针应用delete是安全的

创建数组后我们就可以用指针访问这些数组了

int * pt =new int[3]

pt[0] =1;

pt[1] =2;

pt[2] =3;

使用指针符号可以处理数组中的数据,相应的执行速度往往比使用数组符号要快

c++ 指针(一)的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  3. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  4. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  5. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

  6. Marshal.Copy将指针拷贝给数组

    lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...

  7. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. 智能指针shared_ptr的用法

    为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...

  10. 智能指针unique_ptr的用法

    unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...

随机推荐

  1. yii2解决百度编辑器umeditor图片上传问题

    作者:白狼 出处:http://www.manks.top/article/yii2_umeditor_upload本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原 ...

  2. ORA-07445&ORA-00108错误案例

    由于需要ORACLE的UAT测试环境,克隆了虚拟机后,修改IP地址后,启动实例遇到了ORA-07445 &ORA-00108错误. 案例环境:   SQL> select * from ...

  3. ADO.Net(五)——实战:对战游戏

    对战游戏 要求: 自建数据表(例如:数据表包含:代号,姓名,性别,血量,攻击力,防御力,命中,闪避,等级等字段) 需要通过程序向数据表添加人员 添加的时候,根据用户输入的名字,自动计算生成相应的血量. ...

  4. javascript多态 - 类形式实现demo

    /* *多态 * 对传入的参数做判断以实现多种调用方式 */ //类形式实现 function Add(){ function zero(){ return 10; } function one(nu ...

  5. CentOS7网络配置

    *关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中  这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...

  6. cocos2d之列表容器节点再排序

    第一处:获取使用类中传出的数据对象 第二处:清除列表容器中的数据且保存数据缓存 第三处:使用刚创建的函数再排序

  7. (转)Java 详解 JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...

  8. Java 注释说明

    注释 什么是注释呢?就是标注解释的意思,主要用来对Java代码进行说明.Java中有三种注释方式 (1):// :注释单行语句 示例: //定义一个值为10的int变量 int a = 10; (2) ...

  9. 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]

    理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...

  10. IBM云的商业动作之我见(1):IBM 收购 OpenStack 托管私有云公司 Blue Box [IBM Acquired Blue Box]

    2015-06-10 IBM 刚刚(2015/06/03)宣布收购 Blue Box 公司.本文就聊聊这点事. 1. Blue Box 是做什么的?它是一家中小型托管私有云提供商. 1.1 公司的简单 ...