게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(C언어) 포인터 관련 착각 하나....
게시물ID : programmer_3065짧은주소 복사하기
작성자 : rapel
추천 : 1
조회수 : 897회
댓글수 : 9개
등록시간 : 2014/05/04 14:35:15
c언어 기본서를 볼때 중간 즈음 가면 call by value 와 call by reference 라는 내용이 나옴니다.

 개념이야 다들 잘 이해 하셨을텐데 이걸 c에 적용 하면 햇갈리기 시작 합니다.

왜 냐면 여기서 부터 포인터가 시작 되니까요..

흔히 값에 의한 호출 의 경우
func(int a);

 같은 형태로 선언이 되고
참조에 의한 호출의 경우
func ( int * a);

 라고 선언 합니다.

제생각 에서는 여기서 부터 무언가 설명이 잘못 되었다 생각 합니다.

c언어 에서는 참조에 의한 호출을 지원하지 않습니다.
 무슨 소리냐면
func(int * a)는
정수를 인자로 하는 a의 참조를 인자를 받는다 라기 보다는
그냥 단지 정수형 포인터의 주소 값을 인자로 받는다 가 맞습니다.
실제 함수가 호출될때 저 함수에게 주소값이 복사 되어 넘어 간다 이검니다.


call by reference를 위장한 call by value입니다.

java 같은 언어의 경우 클래스를 인자로 받을 경우 
참조에 의한 함수 호출을 잘 구현 해주고 있습니다.

func_java(class_A c)
{
c.func1(); // 그냥 인자호 class c를 받았지만 사용 할때는 '.'연산자로 바로 접근 해서 내부 요소를 사용 할수 있죠.
c.func2(); // 그냥 이게 클래스 라면 그냥 어디서 불러재끼던 클래스가  메모리 어디에 짱박혀 있던 상관 없는 검니다.
}

그렇지만 C  에서는 
func(class_A * c)
{
c->func1(); // 일단 인자 자체도 포인터로 받아야 하며 내부 요소 접근도 '.'이 아니라 포인터 관련 연산자인'->' 를 사용 해야 합니다.
c->func2();
}


여러분 이렇게 주입식 교육이 무서운 검니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호