2011-09-02 37 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。

喲耶,我們把地址在你的地址,你可以在你解決解決。