• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

ref에 대해서 질문이 있습니다.

20.12.22 15:12 작성 조회수 228

0

매개변수나 함수를 호출할때 변수앞에 ref를 붙이는데

이것이 c언어에서 포인터와 유사한 것 같습니다. 궁금한 것은

static void AddOne(ref int num)

{

num+=1;

} 함수 정의하고

int a =0;

AddOne(ref a); 함수 호출하면

C언어에서 주소값을 전달하듯이 a의 참조값을 매개변수 num에 전달한다고 이해를 했습니다.

여기서 헷갈리는 것은 그렇다면 매개변수 ref int num에서 num은 참조값을 다루는 참조형 변수라고 생각해야 할까요?(마치 포인터처럼요)

하지만 그렇다면 바로 다음에 나오는 num+=1;이라는 문장은 값형 변수처럼 쓰이는 것 같은데, 이 부분이 이해가 안됩니다.

답변 2

·

답변을 작성해보세요.

1

네 맞습니다. C#에서 ref를 붙이면
[동작은 포인터와 유사하지만,  변수 사용 방법은 일반 (비참조형) 타입과 같다]고 보시면 됩니다.
즉 내부적으로는 사실상 주소값을 이용하는 포인터 형태와 동일하게 동작하기 때문에
원본을 건드리지만, C 포인터처럼 복잡하게 *나 -> 같은 문법은 필요없습니다.

참고로 C++에도 C#의 ref와 유사한 [참조 타입]이 존재하는데

int a = 0;
int& b = a;

와 같이 만들어주면 b를 이용해 a를 조작할 수 있으면서도
포인터와 다르게 b = 3; 같은 형태로 
일반 int 변수를 사용하는 것처럼 작업할 수 있습니다.

0

ZIOMIN님의 프로필

ZIOMIN

질문자

2020.12.22

그렇군요, 답변 감사합니다! 매번 자세하고 빠르게 답변을 남겨주셔서 정말정말 감사합니다