목차
1. 포인터 연산
포인터에 대해서는 +, -만 가능하다.
포인터의 증감 연산시 증감되는 값은, 포인터가 가리키는 객체의 크기이다.
포인터 타입에 따라 증감되는 값이 다르다.
char 1, short 2, int 4, float 4, double 8이다.
char *pc;
int *pi;
double *pd;
로 데이터타입이 다른 포인터가 세 개 있을 때, 이들을 증감시키면 아래와 같이 이동한다.
2. 함수가 외부로부터 데이터를 받는 방법
1) call by value 값에 의한 호출
함수가 호출될 때 복사본 parameter가 전달됨.
따라서 함수 안에서 parameter가 변경해도 원본은 변하지 않음.
버그를 막을 수 있는 좋은 방법.
<예시>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
void modify(int value)
{
value = 1;
}
int main(void)
{
int number = 2;
modify(number);
printf("number= %d", number); //number=2
return 0;
}
2) call by reference 참조에 의한 호출
함수가 호출될 때 원본 parameter가 전달됨.
따라서 함수 안에서 parameter을 변경하면 원본도 바뀜.
<예시 코드>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
void modify(int *value)
{
*value = 99;
}
int main(void)
{
int number = 2;
modify(&number);
printf("number= %d", number); //number =99
return 0;
}
C언어는 기본적으로 call by value이다.
그런데 포인터를 함수에 전달하면 call by reference를 흉내낼 수 있는 것이다.
<예시코드>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
int main(void)
{
int a = 10, b = 20;
printf("swap() 호출 전 a =%d, b=%d\n", a, b);
swap(&a, &b);
printf("swap() 호출 후 a=%d, b=%d", a, b);
}
'C언어 > 참고서: C언어 콘서트' 카테고리의 다른 글
C언어 48차시 포인터와 배열 연습문제 1 (0) | 2023.04.07 |
---|---|
C언어 47차시 배열과 포인터, cpu, hdd, ssd, memory (0) | 2023.04.06 |
C언어 45차시 포인터, 메모리, 변수, 포인터 연산자 &, *, %p, 간접참조연산자 (0) | 2023.04.05 |
C언어 44차시 함수 연습문제 4 (0) | 2023.04.05 |
C언어 43차시 함수 연습문제 3 (0) | 2023.04.04 |