2017-03-05 47 views
4
地址

我的代碼:搬家數組指針是不會改變的開始

#include <iostream> 

using namespace std; 

int main() { 
    char *test = (char*)malloc(sizeof(char)*9); 
    test = "testArry"; 
    cout << &test << " | " << test << endl; 
    test++; 
    cout << &test << " | " << test << endl; 
    return 1; 
} 

結果:

004FF804 | testArry 
004FF804 | estArry 

我不明白它是如何可能的,我搬到我的數組指針和地址沒不會改變。

+0

'&test'是'test'本身的地址,而不是它指向的地址。 –

+0

好吧,正如我想的那樣,但我怎麼能得到ADDRESS我在找什麼? – Yas

+0

請注意,malloc從未在C++中使用。 –

回答

9

指針確實改變了。你只是不打印它。要打印指針test

cout << (void*) test << endl; 

&test是其中test被存儲的存儲器位置。
test是您用test++遞增的值(即,您沒有增加&test)。

當你這樣做cout << test 012her被挑選出來的過載是一個需要const char*並將其視爲C風格的字符串,打印它指向的字符。投到void*避免此行爲,以打印test的實際值,而不是它指向的值。

+2

這可能是一個好主意,說爲什麼演員'(void *)' vsoftco

+0

@vsoftco好點,補充說。 – emlai

1

在此語句

cout << &test << " | " << test << endl; 

表達&test產生可變test本身顯然是不改變的地址。它存儲在變量中的值被改變了。

如果你想輸出變量test那就是字符串文字內部的點值的價值,你應該寫

cout << (void *)test << " | " << test << endl; 

要考慮到有程序中的內存泄漏,因爲分配後內存指針被重新分配。並且sting文字有常量字符數組的類型。因此指針測試應該聲明爲

const char *test;