본문 바로가기

프로그래밍 언어/C, C++

[Hackerrank] 07. Pointer

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