如果根本不使用单个取消引用运算符,指向指针的指针打印什么值
What value does a Pointer to a Pointer print if not a single dereference operator is used at all?
我已经尝试了以下代码的输出。但是,我还不明白q的值可能代表什么。
我知道 *q 指向 p 意味着,打印 *q 将打印 p的地址,其中 **q 将打印地址 p 指向的值,即 x(=5)。
#include <iostream>
using namespace std;
int main()
{
int x=5;
int *p,**q;
p=&x;
q=&p;
cout<<q;
return 0;
}
那么q本身代表什么呢?只打印 q 时打印的值是多少?
只需打印变量的值和 ardess,您将看到:
x: 5 &x: 0x7fff691dfcc4
p: 0x7fff691dfcc4 &p: 0x7fff691dfcb8
q: 0x7fff691dfcb8 &q: 0x7fff691dfcb0
&var - location;
var - value
你说:
打印 *q 将打印 p 的地址
然而,事实并非如此。打印q
将打印p
的地址。毕竟,你在做q = &p;
时分配了它.
打印*q
会打印p
的值,即x
的地址。
因为q
是指向p
的指针,q
的值是p
的位置,不管在这个特定的平台上意味着什么。(很可能是包含p
值的内存地址。
(我将在这个答案中假设 64 位指针和 32 位整数,只是为了写具体的值。不过,它适用于任何价值)。
我们先来分析一下p
。 p
是存储地址(变量 x
的 8 个字节)。打印*p
将打印驻留在该地址的值,即变量x
值的 4 个字节。打印只需p
将打印存储在p
中的地址的8个字节。
现在,这同样适用于 q
. q
是存储变量p
地址的 8 个字节。因此,打印*p
将打印驻留在该地址的值,即 p
值的 8 个字节。仅打印q
将打印存储在q
中的地址的8个字节。
int x = 1;
分配一个内存块来保存 int 值。该块被命名为"x"。假设 x 在 0x1234 处分配。
int *p;
这里的"p"是指向int的指针,这意味着p将包含某个int的地址。假设 p 分配了地址 0x2345。
p = &x;
这将使 p 包含 x 的地址,即0x1234将存储在分配给 p 的位置。
int **q;
这里 q 是指向 int 的指针,这意味着 q 将包含指向 int 的指针的地址。假设 q 是分配的地址0x3456。
q = &p;
这将使 q 包含 p 的地址,即0x2345将存储在分配给 q 的位置。
希望我简单明了...
只是一种数据类型,与其他类型没有太大区别。它存储另一个数据对象的地址,您可以使用 *p 访问数据对象。因此,指针与其他类型的指针没有什么不同,但它们的内容具有一些特殊的含义。
(int**) 是指向 (int*) 类型的数据对象的指针,与其他指针(它们可能指向 int 类型的数据对象)没有太大区别。
因此,q 的内容是指向 p 的指针,*q 表示您使用内容查找 p。p 的内容是指向整数的指针,*p 表示您使用内容查找整数。
的声明中在 q 之前添加 **,你是在对编译器说,q 是一个指向指针地址的指针。所以当你打印q时,你实际上是在打印p指针的地址,而不是地址p指向的值(即x)。
在您的代码中,p 是一个存储整数地址的指针。但是 p 本身有一个地址,你把它存储在 q 中。
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 将指针分配给另一个指针时会发生什么情况?
- 当该数组的索引中没有元素时,指针指向什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 以下与指针相关的代码的输出是什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- C++中的指针.什么类型的对象