책 내용 질문하기
포인터 예제
도서
2021 시나공 정보처리기사 실기
페이지
212
조회수
521
작성일
2021-03-28
작성자
탈퇴*원
첨부파일

"2021 정보처리기사 실기" 212 페이지 C 예제를 보면 

#include <stdio.h> 

main() {

    int a = 50 ;

    int *b = &a ;

    *b = *b + 20 ;

    printf("%d, %d\n", a, *b) ;

    char *s ;

    s = "gilbut" ;

    for (int I = 0; I < 6, I += 2) {

        printf("%c, ", s[i]) ;

        printf("%c, ", *(s+i)) ;

        printf("%s\n", s+ i) ;

    }

}

 

그런데 "2020 정보처리기사 필기' 교재 595 페이지 예제를 보면

#include <stdio.h>

main() {

    int a = 50 ;

    int *b ;

    b = &a ;

    *b = *b + 20 ;

    printf("%d, %d\n", a, *b) ; 

}

첫번째 예제에서 -> int *b = &a ;

두번째 예제에서 -> int *b ;

                       b = &a ;

가 결과적으로 같은 의미인가요?

 

제가 현재 이해한 바로는 

포인터 변수로 표시하기 위해 변수명 앞에 * 를 붙인다. 그때 변수는 주소값을 보관한다.

그렇기 때문에 첫번째 예제의 int *b = &a ; 은 이해하기가 좀 어렵습니다. (두번째 예제가 맞는 표현같습니다)

 

추가적인 설명을 해주시면 감사하겠습니다.

답변
2021-03-29 10:48:58

안녕하세요 길벗수험서 운영팀입니다.

 

둘 모두 올바른 표현입니다.

 

애스터리스크(*)는 포인터 선언 시와 일반 사용 시의 용법이 서로 다릅니다.

 

선언 시 사용하는 *는 단순히 해당 변수가 포인터 변수임을 알려주는 역할을 수행하며,

선언 외에 사용하는 *는 포인터가 가리키는 곳의 값을 나타내는 역할을 수행합니다.

 

때문에 첫 번째 예제와 같이 선언 시 사용한 *는 단순히 b가 포인터 변수라는 것을 가리킬 뿐, b가 가리키는 위치의 값을 의미하는 것이 아니기 때문에 두 번째 예제와 같이

 

int *b;

b = &a;

 

와 동일한 역할을 수행하며, 이를 한 문장으로 축약한 것과 다름이 없습니다.

 

행복한 하루되세요 :)

  • 관리자
    2021-03-29 10:48:58

    안녕하세요 길벗수험서 운영팀입니다.

     

    둘 모두 올바른 표현입니다.

     

    애스터리스크(*)는 포인터 선언 시와 일반 사용 시의 용법이 서로 다릅니다.

     

    선언 시 사용하는 *는 단순히 해당 변수가 포인터 변수임을 알려주는 역할을 수행하며,

    선언 외에 사용하는 *는 포인터가 가리키는 곳의 값을 나타내는 역할을 수행합니다.

     

    때문에 첫 번째 예제와 같이 선언 시 사용한 *는 단순히 b가 포인터 변수라는 것을 가리킬 뿐, b가 가리키는 위치의 값을 의미하는 것이 아니기 때문에 두 번째 예제와 같이

     

    int *b;

    b = &a;

     

    와 동일한 역할을 수행하며, 이를 한 문장으로 축약한 것과 다름이 없습니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.