2011-09-02 51 views
2

是否有可能找到一个指针变量本身的存储位置?指针变量本身的内存位置?

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

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

会给我的A.位置是否k有一个位置?

+1

是要明白,一个指针变量_both_指针和变量是很重要的。并非所有的指针都是变量。例如。 '&A'是一个指针,但不是一个变量。因此,你不能说'&(&A)'。但是'k'在这里是一个变量,所以_你可以采用它的地址。 – MSalters

回答

6

int *k位置是&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中,存储的存储器地址。像任何其他变量一样,它具有自己的地址,并且语法是相同的。对于大多数意图和目的,指针的作用类似于相同大小的无符号整数。

现在,当您拍下&k时,您现在有一个int **,伴随着所有有趣的复杂性。

int ** k_2 = &k*k_2k**k_2*k,所以一切正常关于你如何期望。

这可以是创建对象的跨库的有效途径(指针是相当基本的和主要安全通过)。双指针通常用于要传递指向对象的接口,但不会公开如何创建对象(例如,DirectX)。

2

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

+4

'* k'的位置是'k'。 'k'的位置是'&k'。 –

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

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

哟耶,我们把地址在你的地址,你可以在你解决解决。