2017-11-21 21 views
-6

이것은 특히 이상한 질문이지만, 참조 또는 '&'을 사용하지 않고 두 정수의 값을 서로 바꿔주는 함수를 작성하려고합니다. 나는 이것이 심지어 어떻게 가능한지 보지 못한다. 여기 내가 지금까지 가지고있는 것이있다.Refrences를 사용하여 두 개의 정수를 바꿀 함수를 작성하십시오.

void swap (int a, int b) 
    { 

    int temp; 
    temp = a; 
    a = b; 
    b = temp; 

    } 

이 정상적으로 내가 할 것이 방법이 될 것이지만, 정수 영구적으로 변경하지 않기 때문에, 나는 참조하지 않고 이런 짓을 했을까 방법에 대한 아무 생각이 없습니다. 어떤 제안?

감사합니다.

+0

가. 스왑 함수가 내부로 스왑 될 수 있지만 호출자에게는 아무런 영향을 미치지 않는다는 것을 의미합니다. – drescherjm

+0

포인터는 기술적으로 참조하는 것이기 때문에 (''void swap (int & a, int & b)'를 사용하는 것과 같지 않다. –

+0

요청의 전체 내용은 무엇입니까? 그것은 말이되지 않습니다. –

답변

-1

질문 제목을 수정해야합니다. 그것은 "참조 사용"을 말합니다. 그것은 분명히 당신이 의미하는 것의 반대입니다.

이 없다고 가정 : 어떤 래퍼 트릭 exluding 허용

진정
  • 대한 참조와 포인터를
  • 런타임 스왑 당신이 원하는 무엇인가 - 시간 템플릿 속임수
  • 어떤 클래스를 컴파일 반대로, 그 때문에 사소한 일 이겠네.

나는 완전히 끔찍한 해결책을 생각할 수있다. ints 전역을 만드십시오.

ridiculous_swap.hpp

#ifndef RIDICULOUS_SWAP_HPP 
#define RIDICULOUS_SWAP_HPP 

extern int first; 
extern int second; 

void swap_ints(); 

#endif // RIDICULOUS_SWAP_HPP 

ridiculous_swap.cpp

int first = 0; 
int second = 0; 

void swap_ints() 
{ 
    auto tmp = first; 
    first = second; 
    second = tmp; 
} 

MAIN.CPP

#include "ridiculous_swap.hpp" 
#include <iostream> 

int main() 
{ 
    first = 23; 
    second = 42; 
    std::cout << "first " << first << " second " << second << "\n"; 
    // prints: first 23 second 42 

    swap_ints(); 
    std::cout << "first " << first << " second " << second << "\n"; 
    // prints: first 42 second 23 
} 

I t는 아무 것도 쓸모가 없지만 참조 나 포인터를 사용하지 않고 두 개의 정수를 교환합니다.

-1

임시 변수를 사용하지 않고 두 개의 정수와 같은 변수를 교환하는이 오래된 트릭이있다 : 당신은 값으로 전달하는

void swap(int& a, int& b) 
{ 
    a ^= b; 
    b ^= a; // b^(a ^b) = a 
    a ^= b; // (a^b)^a = b 
}