指针

关于指针的讨论

深入知识

首先我们在这里定义

int x = 1;
int y = 2;
int* p; 

根据内存的知识我们知道,int变量x和int指针变量p,分配在一段连续的内存当中

变量名xyp
内存地址840

当我们在计算机里定义好变量之后,我们划分一定的内存空间给这些变量,对于一个int变量而言,内存中存储的值可以改变,可是x变量的地址是不会变的

p = &x;

这样我们可以使指针发挥用处,经过这个指令后,p中存储的是x变量的地址
我们知道,系统读取一个变量的值的过程:

  1. 根据变量名找变量所在地址
  2. 根据地址找内存中存的值

因此,我们来看p的值

cout << p;

此时,输出的将是一串地址,也就是变量x的地址
我们再输出解引用操作后的值:

cout << *p;

此时输出的将是指针变量p所存储的地址中所存储的值
这样,我们对指针的基本工作有了一些了解

常量与指针

前提:常量和变量不能互相赋值
首先我们列出所有的四种可能:
关系表格

指针被指数据
变量Variable变量Variable
变量Variable常量Constant
常量Constant变量Variable
常量Constant变量Variable

这样对应着四种引用方式:
我们先看被指数据为变量的

int x = 1;
int* p = &x;

这是最常见的一种使用形式,我们对其进行分析

指针p
内存地址不可变
存储的值目前存储x的地址,可更改,可解引用修改变量值
变量x
内存地址不可变
存储的值目前是1,可随意变

2、

int x = 1;
int* const p = &x;
指针p
内存地址不可变
存储的值x的地址,初始化后不可更改,不能通过解引用来修改变量值
变量x
内存地址不可变
存储的值目前是1,可随意变

这里的指针,首先是 const 类型,说明指针变量所储存的值不可变,在这里也就是只能指向x,因此指针p无法使用解引用操作来修改变量x的值
被指数据为常量
3、

const int x =1;
const int* p = &x;
指针p
内存地址不可变
存储的值目前是x的地址,可以更改,不能解引用修改变量
常量x
内存地址不可变
存储的值不可变

在这里,由于被指数据是一个常量,指针在这里可以理解为“只读”操作,它可以读取,但无法修改变量的值,也可以指向其他变量
4、

const int i = 1;
const int* const p = &i;
指针p
内存地址不可变
存储的值目前是x的地址,不可更改,不能解引用修改变量
常量x
内存地址不可变
存储的值不可变

这里的指针只能指向x,并且无法修改x的值,只有读取的功能

总结

对于指针的了解,要深入到内存存储中来分析
访问指针变量的地址——读取地址中的存储的值(其他变量的地址)——访问对应地址存储的值——解引用操作得到需要的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值