2013-03-09 59 views
2

我被困在下面的指針問題發出了指針的值:增量時,作爲參數

假設你有一個函數:

void Function (unsigned char *ubPointer) 
{ 
    ubPointer++; 
} 

int main (void) 
{ 
    unsigned char *PointerX; 

    Function(PointerX); 
} 

我想的是,++反映在PointerX中,沒有聲明它是一個全局變量。

非常感謝。

+1

@Andy是100%正確的,但是他沒有明確說出的是你正在通過值*傳遞指針*。在C中,所有東西都是按值傳遞的,所以如果你想要改變一個函數的參數,你必須添加另一個間接級別(即在這種情況下指向指針的指針)。 C++允許引用,它們在概念上相似,但保證引用不爲空。 C和C++是不同的語言。你應該指定你感興趣的是答案會有所不同。 – 2013-03-09 21:57:47

+0

@Ed:該死的,我知道我忘了寫一些東西;)非常好的一點。 – 2013-03-09 22:00:26

回答

11

在C++中,通過參考傳遞指針(不要忘了指定返回類型爲你的函數):

void Function (unsigned char*& ubPointer) 
//       ^
{ 
    ubPointer++; 
} 

這不會需要調用代碼任何進一步的變化。從功能返回時,主叫方會看到​​的副作用。

void Function (unsigned char** ubPointer) 
//       ^
{ 
    (*ubPointer)++; 
// ^^^^^^^^^^^^ 
} 

這將要求你改變你調用你的函數的方式:

int main() 
{ 
    unsigned char* p; 
    Function(&p); 
    //  ^
} 
0

在C語言中,你可以通過一個指針到您的指針達到相同的結果

或者,如果你想這樣做C型

void Function (unsigned char **ubPointer) 
{ 
    (*ubPointer)++; 
} 

因爲

Function (unsigned char **ubPointer) 
{ 
    ubPointer++; 
} 

會增加指向的地址。

+0

它不需要**嗎? – teppic 2013-03-09 21:24:13

+0

你爲什麼這麼想?函數的簽名說明它是一個指針。你用'*'解引用一個指針。如果你不相信,請自己嘗試。 – 2013-03-09 21:25:27

+0

我可能太累了,但我認爲它會尊重'char'並增加這個字母。 – teppic 2013-03-09 21:33:17