【问题标题】:memory location of pointer variable itself?指针变量本身的内存位置?
【发布时间】:2011-09-02 03:38:18
【问题描述】:

是否可以找到指针变量本身的内存位置?

即我不想知道指针引用的内存位置,我想知道指针变量的内存位置是什么。

int A = 5;
int *k = &A;
cout << k;

会给我A. 的位置k 有位置吗?

【问题讨论】:

  • 了解指针变量既是指针又是变量很重要。并非所有指针都是变量。例如。 &amp;A 是指针,但不是变量。因此,您不能说&amp;(&amp;A)。但是k在这里是一个变量,因此你可以取它的地址。

标签: c++ pointers


【解决方案1】:

int *k的位置是&amp;k,像这样:

// For this example, assume the variables start at 0x00 and are 32 bits each.
int    A   = 9;  // 0x00 = 0x09
int *  k   = &A; // 0x04 = 0x00
int ** k_2 = &k; // 0x08 = 0x04

// Thus:
cout << "Value of A:   " << A;   // "Value of A:   9"
cout << "Address of A: " << k;   // "Address of A: 0x00"
cout << "Address of k: " << k_2; // "Address of k: 0x04"

assert( A == *k);
assert(&A ==  k);

assert(&A ==  *k_2);
assert( A == **k_2);

assert( k == *k_2);
assert(&k ==  k_2);

指针是一个变量,在 32 位二进制文​​件中为 32 位,在 64 中为 64,用于存储内存地址。与任何其他变量一样,它有自己的地址,并且语法相同。对于大多数意图和目的而言,指针的行为类似于大小相同的无符号整数。

现在,当您使用&amp;k 时,您现在就有了int **,所有有趣的复杂性都随之而来。

int ** k_2 = &amp;k*k_2k**k_2*k,所以一切都按照您的预期进行。

这可能是一种处理跨库创建对象的有用方法(指针是相当基本的,并且大多数情况下可以安全地传递)。双指针通常用于接口中,您希望传递将填充对象的指针,但不公开对象的创建方式(例如 DirectX)。

【讨论】:

    【解决方案2】:

    是的。可以使用 &k 打印出 *k 的内存位置。

    【讨论】:

    • *k 的位置是kk的位置是&amp;k
    【解决方案3】:
    int A = 5;
    int *k = &A;
    cout << k;
    

    A的地址是k; k的地址是&k。

    老兄,我们在你的地址上放了一个地址,这样你就可以一边写地址一边写地址。

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2020-09-15
      相关资源
      最近更新 更多