인프런 커뮤니티 질문&답변
24분
해결된 질문
작성
·
100
답변 2
0
배열 이름은 상수 포인터라고 해서 앞뒤로 왔다갔다 할 수가 없습니다.
포인터 변수만 ++, --로 조정 가능합니다.
배열 이름은 그냥 배열 맨 앞을 가리키는 것으로 고정입니다.
그래서 주신 예제처럼 바꾸면 출력값이 바뀔 수 있습니다.
#include <stdio.h>
int main() {
int arr[5] = {20, 30, 40, 50, 60};
int *ptr = arr;
printf("1번. %d\n", ++*ptr); // 1번. 21 (arr[0] 값 증가 후 출력)
printf("2번. %d\n", *(ptr+1)); // 2번. 30 (arr[1] 값 출력)
printf("3번. %d\n", *ptr++); // 3번. 21 (현재 가리키는 값 출력 후 포인터 증가)
printf("4번. %d\n", ++*ptr); // 4번. 31 (포인터가 가리키는 arr[1] 값을 31로 증가 후 출력)
printf("5번. %d\n", *ptr+1); // 5번. 32 (현재 가리키는 값(arr[1])에 1 더한 값 출력)
printf("6번. %d\n", *ptr++); // 6번. 31 (현재 가리키는 값(arr[1]) 출력 후 포인터 증가)
printf("7번. %d\n", *ptr+1); // 7번. 41 (현재 가리키는 arr[2]에 1 더한 값 출력)
return 0;
}
해당 코드 출력값입니다.
해설은 주석 참고해주세요.
1번. 21
2번. 30
3번. 21
4번. 31
5번. 32
6번. 31
7번. 410
안녕하세요, 인프런 AI 인턴입니다.
꿈나무님께서 질문하신 C언어에서 배열과 포인터의 관계는 많은 분들이 헷갈리는 주제입니다. 배열과 포인터는 밀접하게 관련되어 있지만, 몇 가지 차이점도 존재합니다. 질문에서 언급하신 코드 세그먼트에서 출력 결과를 이해하려면, 각각의 printf 구문이 어떤 메모리 위치와 값을 사용하는지를 이해해야 합니다.
배열의 이름 arr 은 상수 포인터로 배열의 첫 번째 요소를 가리킵니다. 따라서 ptr = arr; 라는 표현은 ptr 이 arr 의 첫 번째 요소의 주소를 가리키도록 합니다. 그렇기 때문에 arr 을 사용하건 ptr 을 사용하건 메모리 주소기준으로 동일한 요소를 접근하게 됩니다.
다음은 각 printf 문에서의 동작입니다:
++*ptr: 포인터ptr이 가리키는 첫 번째 요소의 값을 증가시킵니다. 첫 번째 요소의 값이 1 증가하고 그 값을 출력하게 됩니다.*(ptr+1): 이는ptr의 다음 요소(즉, 배열의 두 번째 요소)를 출력합니다.*ptr++: 현재 포인터가 가리키는 값을 출력한 다음, 포인터ptr이 다음 요소를 가리키도록 합니다. 후위 증가 연산자로, 출력 후에ptr이 한 칸 이동됩니다.++*ptr: 이전에*ptr++에 의해 포인터가 이동되었으므로 이 시점에서ptr이 가리키는 새로운 요소의 값을 증가시키고 그것을 출력합니다.*ptr+1: 현재ptr이 가리키는 요소의 값에 1을 더한 결과를 출력하지만,ptr자체는 변경되지 않습니다.*ptr++: 현재 포인터가 가리키는 값을 출력하고 다시ptr을 다음 요소로 이동시킵니다.*ptr+1: 현 시점에서ptr이 가리키는 요소의 값에 1을 더한 결과를 출력합니다.
관련된 내용과 추가적인 설명은 다음의 질문과 답변에서 확인할 수 있습니다. 이 게시물들은 포인터와 배열 사이의 차이와 연산자 우선순위에 대한 다양한 사례를 보여줍니다:
- C언어 배열 질문: 배열과 포인터 연산의 차이를 설명하고 있습니다.
이러한 기본 원리들을 이해하면 배열과 포인터를 더 쉽게 사용할 수 있을 것입니다. 추가적으로 궁금한 점이 있으시다면 말씀해 주세요. 추가적인 설명을 드리겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






저렇게 바뀐다면 출력값이
1번. 21
2번. 30
3번. 21
4번. 31
5번. 32
6번. 32
7번. 41
이 답이 맞을까요?