"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 ; 은 이해하기가 좀 어렵습니다. (두번째 예제가 맞는 표현같습니다)
추가적인 설명을 해주시면 감사하겠습니다.
안녕하세요 길벗수험서 운영팀입니다.
둘 모두 올바른 표현입니다.
애스터리스크(*)는 포인터 선언 시와 일반 사용 시의 용법이 서로 다릅니다.
선언 시 사용하는 *는 단순히 해당 변수가 포인터 변수임을 알려주는 역할을 수행하며,
선언 외에 사용하는 *는 포인터가 가리키는 곳의 값을 나타내는 역할을 수행합니다.
때문에 첫 번째 예제와 같이 선언 시 사용한 *는 단순히 b가 포인터 변수라는 것을 가리킬 뿐, b가 가리키는 위치의 값을 의미하는 것이 아니기 때문에 두 번째 예제와 같이
int *b;
b = &a;
와 동일한 역할을 수행하며, 이를 한 문장으로 축약한 것과 다름이 없습니다.
행복한 하루되세요 :)
-
관리자2021-03-29 10:48:58
안녕하세요 길벗수험서 운영팀입니다.
둘 모두 올바른 표현입니다.
애스터리스크(*)는 포인터 선언 시와 일반 사용 시의 용법이 서로 다릅니다.
선언 시 사용하는 *는 단순히 해당 변수가 포인터 변수임을 알려주는 역할을 수행하며,
선언 외에 사용하는 *는 포인터가 가리키는 곳의 값을 나타내는 역할을 수행합니다.
때문에 첫 번째 예제와 같이 선언 시 사용한 *는 단순히 b가 포인터 변수라는 것을 가리킬 뿐, b가 가리키는 위치의 값을 의미하는 것이 아니기 때문에 두 번째 예제와 같이
int *b;
b = &a;
와 동일한 역할을 수행하며, 이를 한 문장으로 축약한 것과 다름이 없습니다.
행복한 하루되세요 :)