[Hackerrank] C++ - 07 Pointer

후유카와·2024년 11월 22일

Hackerrank

목록 보기
7/59

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.

profile
안녕하세요! 저는 전자공학을 전공하며 하드웨어와 소프트웨어 모두를 깊이 있게 공부하고 있는 후유카와입니다. Verilog HDL, C/C++, Java, Python 등 다양한 프로그래밍 언어를 다루고 있으며, 최근에는 알고리즘에 대한 학습에 집중하고 있습니다. 기술적인 내용을 공유하고, 함께 성장할 수 있는 공간이 되기를 바랍니다. 잘못된 내용이나 피드백은 언제나 환영합니다! 함께 소통하며 더 나은 지식을 쌓아가요. 감사합니다!

0개의 댓글