인프런 커뮤니티 질문&답변

wldnjs2110님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.11 문자열을 숫자로 바꾸는 방법들

안녕하세요 교수님 end의 이중포인터 부분이 잘 이해가 가지않습니다

20.02.13 02:49 작성

·

321

0

본 강의 6분 30추 쯤 나오는 

end가 strtol 함수 내에서 &end로 이중 포인터가 되는지 이해가 가지않습니다

답변 4

2

호두님의 프로필 이미지

2020. 02. 13. 09:52

안녕하세요?

덕분에 저도 복습을 했네요.

함수가 return을 하나만 할 수 있어서, 포인터를 이용해서 여러개를 리턴하는 효과?를 간접적으로 구현할 수 있는 걸로 알고있어요.

강의 [06:06]를 보시면 

str~~함수들의 특징은 '끝을 표현하는 문자 포인터 변수를 하나 더 넣어주고 있어요' 이런 설명이 있는데요. 

strtol 안에서 한글자 한글자 변환을 하다가 변환을 할 수 없는 것을 만나면 그 포인터를 여기에 넣어주는 거예요. 

--------------------------

함수의 리턴값은 하나 이기 때문에 함수 파라미터로 포인터를 이용해서 마치 반환값이 두 개 인것 처럼 작동하게 되는 거라고 생각해요. 그런데 그 반환할 값이 포인터 이기 때문에  이중포인터를 사용하고 있는거죠.

strtol : https://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm

감사합니다.

1

호두님의 프로필 이미지

2020. 02. 14. 17:48

안녕하세요?

아래 코드를 한 번 실행해보세요. 작동하는 코드입니다.

<코드>

#include <stdio.h>

void sum_diff(int aint bint *sumint * diff);

int main()
{
    int a = 2;
    int b = 7;

    int sum = 0;    // 값을 받고 싶은 변수
    int diff = 0;  // 값을 받고 싶은 변수

    printf("sum : %d, diff : %d\n", sum, diff);// sum_diff 함수 호출전
    sum_diff(a, b, &sum, &diff);
    printf("sum_diff 호출 후  ======== \n\n");
    printf("sum : %d, diff : %d\n", sum, diff);// sum_diff 함수 호출후


    return 0;
}

void sum_diff(int aint bint *sumint * diff)
{
    *sum = a + b;
    *diff = a > b ? (a - b): (b - a);
}

아래 문제를 보시면 sum, diff변수에 각각 저장하는 함수다라고 쓰여있죠?

이 함수의 return type은 void인데 어떻게 저장을 할까요?

바로 포인터를 보내서 변수에 직접 접근할 수 있게 하는 겁니다.

이해에 도움이 되었으면 좋겠네요.

감사합니다.

1

wldnjs2110님의 프로필 이미지
wldnjs2110
질문자

2020. 02. 13. 19:05

제가 아직 포인터에 대한 기본 개념이 부족해서인지 아직 완전히 이해가 되지않네요 

"함수 파라미터로 포인터를 이용해서 마치 반환값이 두 개 인것 처럼 작동하게 된다"는 부분이 이해가 안가는데 이 부분 혹시 더 자세히 설명 해주실 수 있으실까요? 

0

wldnjs2110님의 프로필 이미지
wldnjs2110
질문자

2020. 02. 17. 18:47

아 감사합니다 이제야 이해 했습니다 보이드 함수의 경우 리턴을 못하여 포인터 주소값을 가르켜 그 값을 읽어오는 형태이군요 잘 배웠습니다!