- [쉽게풀어쓴C언어] 포인터 총 정리 4: 포인터와 함수(call by value, call by reference)2024년 02월 03일
- 주사위 clice
- 작성자
- 2024.02.03.:32
반응형함수 호출시 인수 전달 방식
- 값에 의한 호출 (call by value): 복사본이 전달된다
- 참조에 의한 호출(call by reference): 원본이 전달된다
c언어에서는 값에 의한 호출(call by value)만 지원한다
값에 의한 호출을 할 경우 복사본을 가지고 코딩을 하기 때문에 원본에 영향을 줄 수 없다
따라서 참조에 의한 호출(call by reference)을 하고 싶다면 포인터를 이용해 간접적으로 구현해야 한다
참조에 의한 호출(call by reference)
원본이 직접 전달된다
이것이 포인터로 가능한 이유는 포인터를 통해 원본 값에 접근, 수정이 가능하기 때문이다
#include <stdio.h> void swap(int *px, int *py); int main(void) { int a=100, b=200; printf("a=%d b=%d \n", a,b); swap(&a, &b);// 포인터를 전달한다 printf("a=%d b=%d \n", a,b); return 0; } void swap(int *px, int* py) { int temp; //temp는 temporary(임시저장소)의 줄임말이다 temp=*px; *px=*py; *py=temp; }
결과
scanf()함수
지금까지 인지하지 못 했지만 항상 scanf함수를 사용할때 &를 필요로 했다
예시
int age; scanf(“%d”, &age);
포인터를 사용하는 반환값
return &a;
이런식으로 반환할 때 포인터를 사용할 수 있다
이때 주의할 점은 함수가 종료 되었을 때 return 하는 값이기 때문에
함수가 종료 되었을 때 메모리에 남아있는 변수를 반환해야 한다
따라서 지역변수를 반환값으로 하면 오류가 난다
중간점검
함수에 매개 변수로 변수의 복사본이 전달되는 것을 ( call by value )라고 한다
함수에 매개 변수로 변수의 원본이 전달되는 것을 ( call by reference )라고 한다.
배열을 함수의 매개 변수로 지정하는 경우, 배열의 복사가 일어나는가?
참조의 복사가 일어난다
반응형'프로그래밍 언어 > c언어' 카테고리의 다른 글
[쉽게풀어쓴C언어] 포인터 총 정리 5: 포인터와 배열 (0) 2024.02.03 [쉽게풀어쓴C언어] 포인터 총 정리 3: 포인터 연산과 주의할 점 (0) 2024.02.03 [쉽게풀어쓴C언어] 포인터 총 정리 2: 간접참조 연산자 * (0) 2024.02.03 [쉽게풀어쓴C언어] 포인터 총 정리 1: 포인터란? (0) 2024.02.03 [C언어] for문 예제 별찍기/별탑 쌓기 (0) 2023.08.04 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)