在C++中指针中储存的地址和这个地址中的地址有何区别

在C++中指针中储存的地址和这个地址中的地址有何区别,第1张

指针是一个4字节(32位系统,64位系统中为8字节)的值你可以把它当作一个索引数值根据这个数值可以定位内存中的一个起始位置这个位置就是指针指向的内容

int a = 9;

int p = &a;

这里p这个指针的内容为a这个变量在内存中存储为位置(32位系统中为一个4字节的值)例如0x0018fe9c(在程序运行时根据实际情况分配)

p这个地址所指向的位置(内存0x0018fe9c)的内容为9

p ==0x0018fe9c;

p==9;

没有任何区别。

另外还有

double

x,也和他们一样。

这三种写法在词法分析结果来看都是连续的3个token,分别是关键字double

,

*** 作符

,还有一个identifier。语法上来看并没有空格,空格被吃掉了。

一个变量的地址成为该变量的指针例如,地址2000是变量i的指针如果有一个变量专门用来存放另一变量的地址(即指针),则它称为"指针变量"假设定义了一个变量i_pointer(变量名可任意取),用来存放整形变量的地址可以通过下面语句将i的地址(2000)存放到i_pointer中

i_pointer=&i;

这时,i_pointer的值就是2000(即变量i所占用单元的起始地址)

上述的i_pointer就是一个指针变量指针变量就是地址变量,用来存放地址,指针变量的值是地址(即指针)

请区分"指针"与"指针变量"这两个概念例如,可以说变量i的指针是2000,而不能说i的指针变量是2000指针是一个地址,而指针变量是存放地址的变量

希望对你有帮助

首先,你要明白一个概念,指针,是做什么的?答案是,指针,是指向地址的。

程序指针,指向的空间,在物理上是Flash,在逻辑上,就是代码空间。比如说51单片机的PC指针,指向的就是Flash,即程序下一步要执行的指令的地址。

数据指针,指向的空间,在物理上有Flash和RAM,在逻辑上是Flash里的常数空间和数据空间,注意,是对于单片机来说,对于我们的电脑,常数空间不是在Flash上。

比如说51单片机的DPTR,如果用MOVC A,@A+DPTR,此时,就是指向常数空间,如果用

MOVX A,@A+DPTR就是指向的数据空间。

堆栈指针,指向的空间,在物理上是RAM,在逻辑上,就是数据空间,是特定的数据空间,堆栈是数据空间中单独划分出来,专门用于寄存中间结果的内存空间。

数据指针和堆栈指针主要有两个区别:

一是数据指针可以指向Flash,即可以指向常数,比如说我们定义一个数组 unsigned char code Table[99],此时,就是DPTR可以指向常数空间。堆栈指针是不可以的,只能是指向RAM。

第二个区别,堆栈指针指向的是特定的数据空间,这个特定的数据空间,是从整个数据空间里划分出来,专门用于作堆栈用的,堆栈区间一旦划分出来,堆栈指针在规则上,就只能在这个范围内活动,如果出了这个范围,可能导致整个程序的崩溃。而数据指针在规则上,可以指向整个数据空间,但是,可以读堆栈空间,不应该去修改,否则也可能导致程序的崩溃。

以上就是关于在C++中指针中储存的地址和这个地址中的地址有何区别全部的内容,包括:在C++中指针中储存的地址和这个地址中的地址有何区别、直接定义指针变量和定义变量后取其地址有什么区别、指针变量的数据和指针变量指向的地址有什么区别求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9828663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存