07. 포인터
[ 난이도: Easy | 분야: Introduction ]
1. 내용 정리
C++에서 포인터는 코드의 다른 곳에서 메모리 주소를 공유할 때 사용한다.
함수가 변수의 값을 수정해야할 때 사용하지만, 값을 따로 저장하는 것은 아니다.
변수의 메모리 주소에 접근하기 위해, &를 사용한다.
예를 들어, &val이라고 하면 val의 메모리 주소를 반환한다.
이 메모리 주소는 포인터에 할당되고 함수들 사이에서 공유될 수 있다.
예를 들어, int * p = &val 은 포인터 p에 val의 주소를 할당합니다.
메모리 포인터가 가리키는 데이터를 접급하고 싶다면 변수명에 *을 붙인다.
예를 들어, * p는 val에 저장되어 있는 데이터를 반환하고 val의 데이터를 수정할 수도 있다.
void increment(int *v) {
(*v)++;
}
int main() {
int a;
scanf("%d", &a);
increment(&a);
printf("%d", a);
return 0;
}
2. 과제
함수 설명
update 함수를 완성해라.
다음 파라미터를 업데이트 하라:
int *a: 정수
int *b: 정수
반환
void 타입이기 때문에 어느 값도 반환할 필요가 없다. 메모리 값을 변경하여 a는 두 수의 합을, b는 두 수의 차이를 가진다.
a' = a + b
b' = | a - b |
입력 형식
입력은 두 정수 a와 b를 가진다. 이 두수는 개행 문자로 구별되어 있다.
입력 예시
4
5
출력 예시
9
1
설명
a' = 4 + 5 = 9
b' = | 4 - 5 | = 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;
}
더보기
정답
void update(int *a,int *b) {
// Complete this function
int sum = *a + *b;
int absdiff = *a - *b;
if (absdiff < 0 ) absdiff = -absdiff;
*a = sum; *b = absdiff;
}
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;
}
ⓒ Hackerrank. All Rights Reserved.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 09. Variable Sized Array (2) | 2024.02.08 |
---|---|
[Hackerrank] 08. Arrays Introduction (0) | 2024.02.06 |
[Hackerrank] 06. Functions (1) | 2024.02.05 |
[Hackerrank] 05. For Loop (1) | 2024.02.05 |
[Hackerrank] 04. Conditional Statements (1) | 2024.02.03 |