1
stackoverflow의 answer에 일반 스왑 함수에 대한 다음 선언이 있습니다. 우리는 C에서 유사한 기능을 작성하는 경우매크로의 크기와 함수의 차이점
#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)
그러나 그것은 작동하지 않으며, 작동하려면 우리는 명시 적으로 * 빈 공간의 크기에 유형을 통과해야합니다. 매크로가 호출되는 함수 내에서 매크로가 확장되고 sizeof가 변수 x 또는 y와 동일한 범위에 있기 때문에 sizeof가 작동하기 때문에 이러한 현상이 발생한다는 것을 이해합니다. 나 맞아?
만약 그렇다면. 다음 상황을 고려하십시오.
void someComplexFunction(void* a, void* b){
swap(a,b);
}
이게 맞습니까? 나는 그것을 시도하고 그것은 효과가있다. 왜 이것이 효과가 있습니까?
유사하지만,이 값에 의해 단지 통과 도시이다. – Sohaib
값이 아닌 포인터를 전달하고 있습니다. C/C++에서는 항상 포인터를 조작 할 수 있습니다. – esskar
오케이. 알았다! – Sohaib