簡體   English   中英

通過指針傳遞函數參數

[英]Pass on function arguments by pointer

當函數參數屬於同一類型時,遵循代碼定義良好且可移植嗎?

void foo(int* p, int size);
void pass_on_args_by_pointer(int a, int b, int c)
{
    foo(&a, 3);
}

要清除:'size'參數應該包含數組p中的元素數。 所以,我想將所有三個整數傳遞給foo。

不,這既不便攜也不明確。 編譯器不需要在內存中的相鄰位置分配函數參數。 事實上,他們不需要將參數bc放在內存中,因為你沒有拿到他們的地址。 超出的范圍的任何訪問int通過pfoo是不確定的行為。

void foo(int** p, int size)
{
   **p = size;
    return;
}
void pass_on_args_by_pointer(int *a, int b, int c)
{
   foo(&a, 3);
}

int main(void)
{
    int a = 0;
    pass_on_args_by_pointer(&a, 0, 0);
    printf("a = %d", a);

}

如果要為變量a分配一些值,則需要使用指向指針的指針。

即使它可能會工作(理論上,它應該,因為堆棧可以表示為數組),您的編譯器沒有義務傳遞堆棧上的參數。 例如,它可以使用寄存器來優化代碼,然后代碼就會中斷。

因此,嘗試以這種方式訪問​​另一個函數的參數將是未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM