[英]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。
不,這既不便攜也不明確。 編譯器不需要在內存中的相鄰位置分配函數參數。 事實上,他們不需要將參數b
和c
放在內存中,因為你沒有拿到他們的地址。 超出的范圍的任何訪問int
通過p
在foo
是不確定的行為。
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.