책 내용 질문하기
57번 질문입니다
도서
2023 시나공 기출문제집 사무자동화산업기사 필기
페이지
28
조회수
281
작성일
2023-08-08
작성자
주*은
첨부파일

C언어에서는 int는 정수형으로 2바이트를 의미한다고 토막강의에서 배웠는데요

 

여기서 계산할 때 int로 시작하는데 4바이트로 할당해서 계산이 들어가는데 도저히 이해가 안됩니다.

 

(참고로 컴활 파트4에 나오는 VBA만 이해한 상태이니 C언어 전혀 모르는 사람이라고 가정하시고 알려주시기 바랍니다.)

답변
2023-08-10 11:18:49

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

 

int는 4바이트입니다. 2바이트는 32비트 컴퓨터 이전을 기준으로 강의한 것이며, 최근에 들어서는 int를 모두 4바이트로 취급하는 문제만 출제되니 이점 꼭 염두에 두시기 바랍니다.

 

사실 해당 문제는 자세하게 설명하느라 자료형 4byte니 뭐니 설명하고 있지만, 실상 간단하게 보자면 이점을 굳이 염두에 둘 필요는 없습니다.

 

포인터 변수라는 것은 메모리의 어느 지점을 가리키는 변수이고, 문제에서 int *p=a 라는 것은 a 배열의 시작 지점, 즉 a에 저장된 1을 가리키는 것이라고 이해하시면 됩니다.

그렇다면 a+3은 1에서 다음 3번에 해당하는 위치에 있는 값 3을 가리키라는 의미가 되죠.

(+1은 5, +2는 2, +3은 3, +4는 4)

 

이제 보기 항목들을 보죠.

처음 변수를 선언할 때 빼고 *은 포인터 변수가 가리키는 값을 의미하죠.

*(++p)의 '++'는 1을 더하라는 의미입니다. p에 1을 더한 후 가리키는 곳의 값을 의미합니다.

아까 p는 1을 가리켰으니 여기서 1을 더하면 다음 값인 5를 가리킬테니 출력되는 것은 5가 되겠죠.

 

*p는 아까 p가 1을 가리킨다고 했으니 1이 출력될 것입니다.

 

*(++a)는 1번 보기의 p와 같이 a에 1을 더한 후 가리키는 곳의 값을 의미합니다.

하지만 a는 배열의 이름으로 값이 고정되어 있어 '++'을 수행할 수 없으므로 *(++a)는 출력될 수 있는 값이 아닙니다.

 

p2는 3을 가리켰죠. 여기서 -2 지점의 값을 출력하라고 하였으니, 3에서 앞으로 2칸 이동한 값인 5가 출력되게 됩니다.

 

결국 이 문제는 배열의 이름 'a'가 ++이나 +1 등으로 값이 변경될 수 없다는 점만 알고 있다면 해결할 수 있는 문제가 되겠네요.

 

행복한 하루되세요 :)

  • 관리자
    2023-08-10 11:18:49

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

     

    int는 4바이트입니다. 2바이트는 32비트 컴퓨터 이전을 기준으로 강의한 것이며, 최근에 들어서는 int를 모두 4바이트로 취급하는 문제만 출제되니 이점 꼭 염두에 두시기 바랍니다.

     

    사실 해당 문제는 자세하게 설명하느라 자료형 4byte니 뭐니 설명하고 있지만, 실상 간단하게 보자면 이점을 굳이 염두에 둘 필요는 없습니다.

     

    포인터 변수라는 것은 메모리의 어느 지점을 가리키는 변수이고, 문제에서 int *p=a 라는 것은 a 배열의 시작 지점, 즉 a에 저장된 1을 가리키는 것이라고 이해하시면 됩니다.

    그렇다면 a+3은 1에서 다음 3번에 해당하는 위치에 있는 값 3을 가리키라는 의미가 되죠.

    (+1은 5, +2는 2, +3은 3, +4는 4)

     

    이제 보기 항목들을 보죠.

    처음 변수를 선언할 때 빼고 *은 포인터 변수가 가리키는 값을 의미하죠.

    *(++p)의 '++'는 1을 더하라는 의미입니다. p에 1을 더한 후 가리키는 곳의 값을 의미합니다.

    아까 p는 1을 가리켰으니 여기서 1을 더하면 다음 값인 5를 가리킬테니 출력되는 것은 5가 되겠죠.

     

    *p는 아까 p가 1을 가리킨다고 했으니 1이 출력될 것입니다.

     

    *(++a)는 1번 보기의 p와 같이 a에 1을 더한 후 가리키는 곳의 값을 의미합니다.

    하지만 a는 배열의 이름으로 값이 고정되어 있어 '++'을 수행할 수 없으므로 *(++a)는 출력될 수 있는 값이 아닙니다.

     

    p2는 3을 가리켰죠. 여기서 -2 지점의 값을 출력하라고 하였으니, 3에서 앞으로 2칸 이동한 값인 5가 출력되게 됩니다.

     

    결국 이 문제는 배열의 이름 'a'가 ++이나 +1 등으로 값이 변경될 수 없다는 점만 알고 있다면 해결할 수 있는 문제가 되겠네요.

     

    행복한 하루되세요 :)

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