1
我在stackoverflow上找到了answer中的通用交換函數的以下聲明。宏和函數中sizeof之間的區別
#define swap(x,y) do \
{ unsigned char swap_temp[sizeof(x) == sizeof(y) ? (signed)sizeof(x) : -1]; \
memcpy(swap_temp,&y,sizeof(x)); \
memcpy(&y,&x, sizeof(x)); \
memcpy(&x,swap_temp,sizeof(x)); \
} while(0)
但是,如果我們用C寫一個類似的功能不工作,我們需要在空隙的大小明確地傳遞*類型爲它工作。我知道這會發生,因爲宏將被調用的函數內部擴展,並且sizeof將起作用,因爲它將與變量x或y處於相同的範圍。我對麼?
如果我是。考慮以下情況。
void someComplexFunction(void* a, void* b){
swap(a,b);
}
這是正確的嗎?我試過了,它工作。爲什麼這個工作?
但是這僅僅是一個傳值。 – Sohaib 2015-02-07 19:15:52
您正在傳遞指針,而不是值。在C/C++中,你總是可以操作指針 – esskar 2015-02-07 20:20:42
哦,好的。得到它了! – Sohaib 2015-02-08 07:20:42