我被困在下面的指針問題發出了指針的值:增量時,作爲參數
假設你有一個函數:
void Function (unsigned char *ubPointer)
{
ubPointer++;
}
int main (void)
{
unsigned char *PointerX;
Function(PointerX);
}
我想的是,++反映在PointerX中,沒有聲明它是一個全局變量。
非常感謝。
我被困在下面的指針問題發出了指針的值:增量時,作爲參數
假設你有一個函數:
void Function (unsigned char *ubPointer)
{
ubPointer++;
}
int main (void)
{
unsigned char *PointerX;
Function(PointerX);
}
我想的是,++反映在PointerX中,沒有聲明它是一個全局變量。
非常感謝。
在C++中,通過參考傳遞指針(不要忘了指定返回類型爲你的函數):
void Function (unsigned char*& ubPointer)
// ^
{
ubPointer++;
}
這不會需要調用代碼任何進一步的變化。從功能返回時,主叫方會看到的副作用。
void Function (unsigned char** ubPointer)
// ^
{
(*ubPointer)++;
// ^^^^^^^^^^^^
}
這將要求你改變你調用你的函數的方式:
int main()
{
unsigned char* p;
Function(&p);
// ^
}
在C語言中,你可以通過一個指針到您的指針達到相同的結果
或者,如果你想這樣做C型
void Function (unsigned char **ubPointer)
{
(*ubPointer)++;
}
因爲
Function (unsigned char **ubPointer)
{
ubPointer++;
}
會增加指向的地址。
@Andy是100%正確的,但是他沒有明確說出的是你正在通過值*傳遞指針*。在C中,所有東西都是按值傳遞的,所以如果你想要改變一個函數的參數,你必須添加另一個間接級別(即在這種情況下指向指針的指針)。 C++允許引用,它們在概念上相似,但保證引用不爲空。 C和C++是不同的語言。你應該指定你感興趣的是答案會有所不同。 – 2013-03-09 21:57:47
@Ed:該死的,我知道我忘了寫一些東西;)非常好的一點。 – 2013-03-09 22:00:26