티스토리 뷰
본 포스팅은 렉토피아(http://www.lectopia.com) 의 대학 IT 특강 중
정혜경의 C언어 & 기초 자료구조 강의를 수강하는 수강생이 올린 질문글을 토대로 작성하였습니다.
질문.
>강사님! Call by pointer 기법에 대해 궁금증이 생겨 질문드립니다!!
>
>C언어에서는 리턴값을 1개 밖에 못 갖는데, Call by pointer 기법을 쓰면 리턴값을 여러 개 내는 것과 같은 효과를 가질 수 있다고 설명해주셨는데, 이게 무슨 말인지 잘 이해가 안갑니다 ㅜㅜ
>
>설명부탁드려요 ㅎㅎ ♥
답변.
네에~~ 콜 바이 포인터 기법에 대해서 공부하고 계셨군요
간단한 예제 첨부해 드릴테니 참고해서 공부해 보세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> void input(int* a, int* b, int* c); int main() { int a = 0, b = 0, c = 0; input(&a, &b, &c); printf("%d %d %d\n", a, b, c); return 0; } void input(int* a, int* b, int* c) { printf("세개의 정수를 입력하시오 : "); scanf("%d %d %d", a, b, c); } | cs |
위 예제에서 보면 input 함수는 값을 반환하지 않지만 메인함수에서 a,b,c 를 printf로 찍어봤을때에 입력한 세개의 정수가 출력되는 것을 확인할 수 있습니다.
원리는 나중에 포인터 챕터에서 더 자세히 배우시겠지만 포인터(주소)가 매개변수로 전달되므로 함수에서 그 주소가 가리키는 곳의 원본을 바꿀 수 있다는 것인데요.
따라서 3개의 값을 리턴해서 각각의 변수에 저장한것과 같이 함수 내에서 원본을 바꿀 수 있어서 같은 효과를 낸답니다. 도움이 되셨는지요 그럼 즐프 ^^
원리는 나중에 포인터 챕터에서 더 자세히 배우시겠지만 포인터(주소)가 매개변수로 전달되므로 함수에서 그 주소가 가리키는 곳의 원본을 바꿀 수 있다는 것인데요.
따라서 3개의 값을 리턴해서 각각의 변수에 저장한것과 같이 함수 내에서 원본을 바꿀 수 있어서 같은 효과를 낸답니다. 도움이 되셨는지요 그럼 즐프 ^^
'개발노트 > 질문과 답변' 카테고리의 다른 글
Q&A : 링크에러 발생시 해결방법 (0) | 2015.07.08 |
---|---|
Q&A : 함수의 반환값 (0) | 2015.07.02 |
Q&A : 함수의 반환값과 함수 선언부 (0) | 2015.06.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 티그널
- 안드로이드
- 디렉터리
- 라즈베리파이
- 데이터베이스
- 클래스
- 리눅스
- 소켓 프로그래밍
- 유즈케이스
- MFC
- 액터
- 티라노 시그널
- 악보
- 정렬
- 클라이언트
- 스레드
- 파이썬예제
- 파일
- socket
- Sort
- C/C++
- 소켓
- C++
- 쓰레드
- 자료구조
- C
- 터미널
- 프로세스
- 파이썬
- UML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함