C언어 기출문제 변형에서 6번 문제입니다. 20:56
3
3 asked
20:56번의 문제가 잘 이해가 되지 않습니다.
특히나 다른 사람 질문 내용 봤는데도요
int arr[5] = {20,30,40,50,60}
int *ptr;
ptr= arr;
++*ptr이 왜 21인인가요?
실행 순서때문에 그런건가요?
제가 생각한건
사실 먼저 증가된다음 포인터가 호출될꺼라 생각을 해서 *(ptr+1) == *(arr +1) == arr[1] 을 생각하긴했거든요
*ptr++의 경우
*ptr은 주소 값이 아닌 주소값의 value를 가져오는거라
value값을 가지오는 과정 후에 ++연산이 들어간다고 생각을 해서
*ptr++==arr[0]++ == arr[0]+1로 생각을 했거든요
이부분에 대해 설명이 필요해서 돌려보는데 이해가 잘 안되서요
++*ptr이 arr[0]+1인거랑
*ptr++가 arr[0+1]인 설명이 필요합니다.
일단 외울께요
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 달아단거님.
C 언어에서 포인터와 배열의 증감 연산자는 처음 접할 땐 헷갈릴 수 있는 부분이 많습니다. 질문하신 ++*ptr과 *ptr++의 작동 원리를 설명드리겠습니다.
++*ptr:- 이 경우, 연산자 우선순위에 의해
ptr이 현재 가리키고 있는 주소의 값이 먼저 증가됩니다.
- 따라서,
arr의 첫 번째 요소인arr[0]에 접근하여 그 값을 20에서 21로 증가시키게 됩니다.
- 이는 포인터가 먼저 가리키는 값(즉
arr[0])을 가져와서 1을 더하고, 그 값이 증가된 상태로 저장되는 것입니다.
- 이 경우, 연산자 우선순위에 의해
*ptr++:- 여기에선 포인터가 가리키고 있는 현재 위치의 값을 먼저 참조한 후, 포인터
ptr자체가 1 증가합니다. 이 때문에, 이 후의 연산에선ptr이 다음 배열 요소arr[1]을 가리키게 됩니다.
- 즉,
*ptr++은 포인터가 현재 배열 인덱스에서 값을 사용한 후에 포인터 위치를 1 증가시킵니다.
- 결과적으로
arr[0]의 값을 가져오고,ptr은 다음 위치로 이동하지만 해당 위치의 값은 변경되지 않습니다.
- 여기에선 포인터가 가리키고 있는 현재 위치의 값을 먼저 참조한 후, 포인터
이 차이는 바로 전위 연산자와 후위 연산자의 차이에서 기인합니다. 전위 연산자는 값을 먼저 증가시키고 연산을 시작하는 반면, 후위 연산자는 값을 먼저 사용하고 그 후에 증가시키는 순서로 진행합니다.
좀 더 심화된 설명과 유사한 사례를 통해 추가적인 이해가 필요하시다면, 아래 링크들을 참조하시기 바랍니다:
이 링크들은 포인터와 배열의 상호작용에 대한 다양한 예시와 자세한 설명을 포함하고 있어 큰 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
17강 22:38
0
6
1
16강 2:17
0
17
2
부모 및 자식 생성자 출력 관련
0
10
1
부모 및 자식 생성자 출력
0
13
2
9강 35분경 질문있습니다
0
22
2
11강 3:20
0
24
2
10강 11:42
0
22
2
9강 26:23
0
35
2
9강 23:46
0
31
2
코드 중간에 . 붙은건 뭐라고 봐야할까요?
0
38
2
설명중 단어 의미 해석 문제.
0
25
1
수강 섹션마다 옆에 자료 다운로드 버튼이 있는데. 다운받으면 무슨내용이 있는건가요?
0
20
1
SQL 집중학습
0
40
1
NULL과 0
0
43
2
26년 1회 기출문제 11번 질문드립니다
0
44
1
업캐스팅 문제예시5 & 업캐스팅 문제 예시 6
0
44
2
V1.2 VS V.091
0
48
2
split('T')일때는 T만 제거되는거고 공백은 제거되지 않는 건가요?
0
50
2
파이썬 언어 업데이트, 언어별 학습자료 업데이트
0
48
2
C, java, python 언어 기출문제 강의 질문
0
52
2
1:26 에서 반복문 i[1] 이니까 0 다음 두번째 항목들 아닌가요
0
49
2
d
0
45
2
출력값
0
43
2
(기출) 2023년 3회 코드해석 문제의 1:10입니다.
0
50
2

