학습(Study)
여기서는 C언어의 포인터의 기본적인 사용 방법을 구현하는 방법을 배울 수 있습니다. C언어에서 포인터는 주로 함수에서 여러 데이터 간의 메모리 주소를 공유하는 방법으로 많이 쓰입니다. 함수가 소유권이 없는 변수 내용을 수정해야 할 때마다 주로 사용됩니다.
변수의 메모리 주소에 접근하려면 & 기호를 붙여서 사용해야 합니다. 예를 들어 val 변수의 주소에 접근하려면 &val을 사용해서 val 변수의 주솟값을 반환받을 수 있습니다.
이 메모리 주소가 포인터에 할당되어, 다양한 함수에서 공유할 수 있습니다.
int *p = &val; 을 예를 들면, val 변수의 메모리 주소가 p 포인터에 할당된다고 보면 됩니다. 변수명 앞에 * 기호를 사용하면, 포인터의 메모리 내용에 접근하여 값을 읽을 수 있습니다.
int *p = &val; 에서 *p를 사용하면, val 변수의 값을 읽을 수 있습니다.
void increment(int *v) { (*v)++; } int main() { int a; scanf("%d", &a); increment(&a); printf("%d", a); return 0; } |
위에는 increment 함수를 사용할 때, int 변수 a의 주소 값을 넘겨서, 값을 증가시킨 후 반환하는 함수 예제입니다.
추가 이론
C언어의 포인터를 이론으로 얘기할 때 필요한 건 call-by-value와 call-by-reference이죠. 임의의 변수의 주소를 함수의 인자로 넘겨 변수를 수정하는 것을 참조를 넘겨 수정한다고 해서 call-by-reference라고 부르죠.
목표(Objective)
2개의 정수 포인터 인자값을 받는 함수에서 그 두 수의 합을 세팅하고, 다른 하나는 다른 두 수의 차이를 반환하는 함수를 구현해보자.
과제(Task)
함수 void update(int *a, int *b)를 구현하자.
인자로 전달받은 a에는 a의 값과 b의 값의 합을 입력받아 다시 반환하고,
인자로 전달받은 b에는 b의 인자 값과 a와 b의 차이를 입력받아 다시 반환하는 기능을 구현한다.
입력 형식(Input Format)
새로운 줄로 구분하는 2개의 정수 인자 a와 b를 입력받는다.
제약 조건(Constraints)
딱히 없음
출력 형식(Output Format)
반환한 변수 a와 b를 2줄로 출력한다.
입력 예제(Sample Input)
4
5
출력 예제(Sample Output)
9
1
기본 코드
#include <stdio.h> void update(int *a,int *b){ // Complete this function } int main() { int a, b; int *pa = &a, *pb = &b; scanf("%d %d", &a, &b); update(pa, pb); printf("%d\n%d", a, b); return 0; } |
코드
#include <cstdio> #include <cstdlib> void update(int *a,int *b) { int temp = *a; *a = *a + *b; *b = abs(temp - *b); } int main() { int a, b; int *pa = &a, *pb = &b; scanf("%d %d", &a, &b); update(pa, pb); printf("%d\n%d", a, b); return 0; } |
#include <stdio.h> void update(int *a,int *b) { int aRet = 0, bRet = 0; aRet = *a + *b; bRet = (*a - *b > 0) ? (*a - *b) : (*b - *a); *a = aRet; *b = bRet; } int main(void) { int a = 0, b = 0; int *pa = &a, *pb = &b; scanf("%d %d", &a, &b); update(pa, pb); printf("%d\n%d", a, b); return 0; } |
'C Programming > 연습 문제' 카테고리의 다른 글
[C언어 연습문제]강좌 6. Playing With Characters(문자 입력), scanf()로 공백 입력받기 (0) | 2019.02.19 |
---|---|
[C언어 연습문제]강좌 5. Conditional Statements in C(C언어 if 조건문), 숫자 조건을 영어로 표현하기) (0) | 2019.02.18 |
[C언어 연습문제]강좌 3. Functions in C(최대 값을 구해보자 ) (0) | 2019.02.16 |
[C언어 연습문제]강좌 2. Sum and Difference of Two Numbers(printf()와 scanf()) (0) | 2019.02.14 |
[C언어 연습문제]강좌 1. "Hello World!" in C, C언어 소개 및 입출력 (0) | 2019.02.14 |