책 내용 질문하기
포인터 질문
도서
2024 시나공 정보처리기사 필기 기출문제집
페이지
197,271
조회수
340
작성일
2024-07-01
작성자
김*현
첨부파일

2022년 3월 기출문제 62번을 보면

2차원 배열에서 *(p+1)은 2번째 행의 시작주소를 가르킨다고 하셨는데

2021년 5월 기출문제 70번은 시작주소 다음의 값을 가르킨다고 하시는데 어떤게 맞는건가요?


arr[2][3]={1,2,3,4,5,6}

p=arr


p가 arr 2차원배열의 시작주소를 가르키고 p+1이면 즉 2의 주소 arr[0][1]를 가르키면 *(p+1)은 arr[0][1]의 값인 2를 말하는건데


저 기출문제에서는 *(p+1)은 두번째 행의 시작주소를 가르킨다고 되어있습니다.


arr[0][1]의 값은 *p+1 또는 *(p[0]+1)라고 합니다.


*(*(p+1)+0)은 a[1][0]의 값인 4라고 하시는데 *(p+1)은 2이가

되니까 식 자체가 말이 안되는게 아닌가요?


p에 더해지는 값이 실적인 숫자인것과 변수로 사용되는것의 치이인가요?

int i = 1

*(p+i)


*(p+1)

답변
2024-07-02 10:37:43

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

197쪽에서는 int (*p)[3] = NULL; 라고 해서 3개의 요소를 갖는 정수형 포인터 배열 p를 선언하면서 NULL로 초기화를 했습니다

271쪽에서는 int *p; 라고 해서 정수형 포인터 변수 p를 선언했습니다

197쪽 62번에서 p는 포인터 배열이고 271쪽의 70번에서 p는 포인터 변수포인터배열이냐? 포인터 변수냐? 의 차이입니다.


우선 271쪽에서 p에 a[0] 주소를 저장했으므로 p+1은 a[0] 시작 주소의 다음인 a[0][1]이 됩니다.


197쪽에서는 포인터 배열 p에 arr의 시작 주소를 저장했으므로

*p 또는 *p[0]은 배열의 첫 번째 행의 시작 주소를 갖고

*p[1]은 배열의 두 번째 행의 시작 주소를 갖습니다

*p[0]과 p는 같은 거고 *p[1]과 p+1이 같은 것입니다


즉 해설에서 ④번에는 p[0], p[1]로 위치를 지정하고

해설 ⑤번에서는 p와 p+1로 위치를 지정하는데

포인터 배열의 포인터 변수 p는 p[0]과 같고

포인터 배열의 포인터 변수 p+1은 p[1]과 같아

p+2는 p[2]와 같은것 입니다

포인터 배열의 포인터 변수가 3개의 요소를 갖도록 선언했으니

p[0], p[1], p[2]가 있고 이는 p, p+1, p+2와 대응하는 것입니다


결과적으로 포인터 배열로 선언된 변수냐

그냥 포인터 변수로 선언된 변수냐의 차이로 인해 발생하는 해설의 차이입니다


열심히 공부하셔서 합격하시길 기원하겠습니다.

행복한 하루되세요 :)


  • 관리자
    2024-07-02 10:37:43

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

    197쪽에서는 int (*p)[3] = NULL; 라고 해서 3개의 요소를 갖는 정수형 포인터 배열 p를 선언하면서 NULL로 초기화를 했습니다

    271쪽에서는 int *p; 라고 해서 정수형 포인터 변수 p를 선언했습니다

    197쪽 62번에서 p는 포인터 배열이고 271쪽의 70번에서 p는 포인터 변수포인터배열이냐? 포인터 변수냐? 의 차이입니다.


    우선 271쪽에서 p에 a[0] 주소를 저장했으므로 p+1은 a[0] 시작 주소의 다음인 a[0][1]이 됩니다.


    197쪽에서는 포인터 배열 p에 arr의 시작 주소를 저장했으므로

    *p 또는 *p[0]은 배열의 첫 번째 행의 시작 주소를 갖고

    *p[1]은 배열의 두 번째 행의 시작 주소를 갖습니다

    *p[0]과 p는 같은 거고 *p[1]과 p+1이 같은 것입니다


    즉 해설에서 ④번에는 p[0], p[1]로 위치를 지정하고

    해설 ⑤번에서는 p와 p+1로 위치를 지정하는데

    포인터 배열의 포인터 변수 p는 p[0]과 같고

    포인터 배열의 포인터 변수 p+1은 p[1]과 같아

    p+2는 p[2]와 같은것 입니다

    포인터 배열의 포인터 변수가 3개의 요소를 갖도록 선언했으니

    p[0], p[1], p[2]가 있고 이는 p, p+1, p+2와 대응하는 것입니다


    결과적으로 포인터 배열로 선언된 변수냐

    그냥 포인터 변수로 선언된 변수냐의 차이로 인해 발생하는 해설의 차이입니다


    열심히 공부하셔서 합격하시길 기원하겠습니다.

    행복한 하루되세요 :)


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