C++指针详解(指针初始化与回收,常量与指针,引用与指针)
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++指针详解(指针初始化与回收,常量与指针,引用与指针)相关推荐
- c语言指针常量和常量指针,详解C语言中的常量指针和指针常量
概述对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区 ...
- C++ 智能指针详解
智能指针内容很多,重点是基本用法. #include <boost/shared_ptr.hpp> class CBase: public boost::enable_shared_fro ...
- C/C++ 指针详解
指针详解 参考视频:https://www.bilibili.com/video/BV1bo4y1Z7xf/,感谢Bilibili@fengmuzi2003的搬运翻译及后续勘误,也感谢已故原作者Har ...
- C++Study 指针详解
C++指针详解 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区, ...
- php 数组 指针,php之数组指针详解
本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家. 一.php 数组指针操作 利用php的内置函数:key,current,next(),pre ...
- C++ 中的this指针详解及实例
C++ 中的this指针详解及实例 这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对 ...
- c语言的指针详解ppt,最全的C语言指针详解.ppt
最全的C语言指针详解.ppt 第6章 指针,6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的 ...
- 筑基九层 —— 指针详解
目录 前言: 指针详解 前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧 ...
- 指针数组与数组指针详解
指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说 ...
最新文章
- LeetCode简单题之最长的美好子字符串
- 正则表达式的基本入门
- MAC OS下使用OpenSSL生成私钥和公钥的方法
- PAT乙级-1056. 组合数的和(15)
- php表单时间转换为时间戳-175
- 本地yum仓库和http方式的yum仓库。
- python中的引用类型_Python 中的引用和类属性的初步理解
- JavaBean fields TO ExtjsMode fields
- VC++、MFC、COM和ATL的区别
- 17秋 软件工程 团队第五次作业 Alpha Scrum2
- Windows server 2012 部署活动目录 AD
- 14008.xilinx-EMIO 扩展I2C问题
- ONNX系列六 --- 在Java中使用可移植的ONNX AI模型
- 《GPU高性能编程CUDA实战》代码整理
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
- Python编程基础 一张图认识Python
- KM算法--学习笔记
- 转置矩阵使用T,Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵
- 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!
- 《App Store 审查指南》更新,这几条影响不小