C++指针详解

  • 1、指针的定义初始化以及回收
  • 2、常量与指针
    • 1)常量指针(常指针)
    • 2)指针常量
    • 3)总结
  • 3、引用与指针

1、指针的定义初始化以及回收

指针是一个地址,这个地址内存放数据,这些数据就叫做“指针所指的数据”或者“指针指向的数据”。

指针类型存储的是被存储的数据的地址,即p的值是地址,*p 是p这个地址指向的值。

普通类型:

int main() {//空指针初始化int* p = nullptr;   //整型指针初始化p = new int(42);cout << "Before *P=" <<*p << endl;*p = 10;cout << "After *P=" << *p << endl;//回收指针delete p;return 0;
}
类型
指针 p 0x00e0ffa8{10} int*
指针的间接引用 *p 10 int
指针的地址 &p 0x00cffd34 {0x00e0ffa8 {10}} int**

数组类型:

int main() {//空指针初始化int* q{ nullptr };   //数组指针初始化q = new int[4];   //q存储的是数组首地址for (int i = 0; i < 4; i++) {cout << "Before *(q + i):" << *(q + i) << endl;*(q + i) = i;}for (int i = 0; i < 4; i++) {cout << "After *(q + i):" << *(q + i) << endl;*(q + i) = i;}cout << "-------------" << endl;cout << "*q:" << *q << endl;cout << "*q+2:" << *q+2 << endl;//回收指针delete[]q;return 0;
}

2、常量与指针

1)常量指针(常指针)

常量指针,即指向常量的指针,const在*前。
指向常量的指针必须也被声明为常量,即常量指针。
指针本身可以改变,但指针指向的常量不可改改变。

 const int x = 1;   //常量const int* y=&x;   //指向常量x的常量指针

下面的则是不被允许的

 const int x = 1;   //常量int* y=&x; //这里会报错,因为指向常量的必须也声明为常量

常量指针,p可以更改,*p不可以更改

 const int x = 1;int z = 2;const int* y=&x;y = &z;   // 可以,指针本身可以改*y = z; // 不可以,指针指向的数据是常量,不能改

2)指针常量

指针的内容为常量,因为指针为常量类型,所以指针不能改变,但是指针指向的数据可以改变。

 int x = 2,z=3;int* const y = &x;*y = 3; //可以,指针指向的数据是常量,可以改变y = &z; //不可以,指针本身是常量,不能改变

3)总结

  • 在前先读(*和const谁在前,谁先读)
  • const在谁前,谁不可变

3、引用与指针

一般来说,用到的都是指针类型的引用。
例:

 int* a = new int(10);int*& b = a;

b为指向a的int*类型的引用,即b为a的引用,类型为int指针类型。

类型
a 0x0149c208 {10} int*
b 0x0149c208 {10} int*&
*a 10 int
*b 10 int
&a 0x010ff7dc {0x0149c208 {10}} int**
&a 0x010ff7dc {0x0149c208 {10}} int**

引用和指针的区别

引用 指针
初始化 定义时必须初始化 可以定义空指针
是否可以更改 一旦定义不可再更改,即成为a的引用后不能改为b的 指针p和*p都可以更改

C++指针详解(指针初始化与回收,常量与指针,引用与指针)相关推荐

  1. c语言指针常量和常量指针,详解C语言中的常量指针和指针常量

    概述对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区 ...

  2. C++ 智能指针详解

    智能指针内容很多,重点是基本用法. #include <boost/shared_ptr.hpp> class CBase: public boost::enable_shared_fro ...

  3. C/C++ 指针详解

    指针详解 参考视频:https://www.bilibili.com/video/BV1bo4y1Z7xf/,感谢Bilibili@fengmuzi2003的搬运翻译及后续勘误,也感谢已故原作者Har ...

  4. C++Study 指针详解

    C++指针详解 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区, ...

  5. php 数组 指针,php之数组指针详解

    本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家. 一.php 数组指针操作 利用php的内置函数:key,current,next(),pre ...

  6. C++ 中的this指针详解及实例

    C++ 中的this指针详解及实例 这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对 ...

  7. c语言的指针详解ppt,最全的C语言指针详解.ppt

    最全的C语言指针详解.ppt 第6章 指针,6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的 ...

  8. 筑基九层 —— 指针详解

    目录 前言: 指针详解 前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧 ...

  9. 指针数组与数组指针详解

    指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说 ...

最新文章

  1. LeetCode简单题之最长的美好子字符串
  2. 正则表达式的基本入门
  3. MAC OS下使用OpenSSL生成私钥和公钥的方法
  4. PAT乙级-1056. 组合数的和(15)
  5. php表单时间转换为时间戳-175
  6. 本地yum仓库和http方式的yum仓库。
  7. python中的引用类型_Python 中的引用和类属性的初步理解
  8. JavaBean fields TO ExtjsMode fields
  9. VC++、MFC、COM和ATL的区别
  10. 17秋 软件工程 团队第五次作业 Alpha Scrum2
  11. Windows server 2012 部署活动目录 AD
  12. 14008.xilinx-EMIO 扩展I2C问题
  13. ONNX系列六 --- 在Java中使用可移植的ONNX AI模型
  14. 《GPU高性能编程CUDA实战》代码整理
  15. Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
  16. Python编程基础 一张图认识Python
  17. KM算法--学习笔记
  18. 转置矩阵使用T,Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵
  19. 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!
  20. 《App Store 审查指南》更新,这几条影响不小

热门文章

  1. 异步多线程之ThreadPool详解
  2. 项目集成语音识别(科大讯飞)
  3. NVMe系列专题之四:寻址模型PRP和SGL解析
  4. SGL专用语言SGS开发灵感
  5. html parent 属性,parentNode属性怎么用?
  6. JS替换HTML中现有元素,并将所有属性重新设置给新元素
  7. android字体颜色黑色,Android中颜色选择器和改变字体颜色的实例教程
  8. 好程序员Python教程系列第5讲-分支结构
  9. 华为斩获中国移动5G设备订单的六成份额,爱立信受到惩罚
  10. 天空中的鸟类与飞行安全。