*count++ 에서 precedence 질문
349
작성한 질문수 1
후위증가연산자 ++가 우선순위가 더 높아서
*start++ 가 *(start++)와 동일하다는 것은 알겠습니다.
하지만 이런식이라면 count라는 포인터변수에 ++ 라는 포인터 산술연산을 하고
dereferencing을 한다는 말인데
이것이 후위연산자라서 마치 dereferencing을 먼저하고 그 다음 더하는 것 같아서 헷갈립니다.
Operator precedence in C 를 보면 후위연산자가 제일 순위가 높던데
후위연산자를 보면 우선순위에 맞게 괄호를 넣은 것처럼 보면서 계산하고 계산이 모두 끝난 뒤 후위연산자를 적용하는 방식으로 바라보아야 하나요?
우선순위는 제일 높은데 정작 계산은 제일 나중에 되니 이해가 잘 안되네요.
답변 1
7
*(start++) 👉 이 표현은 start를 1 증가시키고 난 후 그 결과로 dereferencing 한다는 것이 아닙니다.
start++가 먼저 실행되더라도 dereferencing 간접 참조는 start의 증가되기 전의 기존값으로 하게 됩니다. 그 이유는 아래부터 설명드릴게요!
✨후위 증가 연산자가 하는 일
1. 먼저 기존의 값을 복사하여 임시 객체에 담고 이를 리턴한다. (Because a temporary copy of the object is constructed during post-increment and post-decrement, pre-increment or pre-decrement operators are usually more efficient in contexts where the returned value is not used. 출처링크)
2. 그리고 나서야 원본에 대해 1 증가 연산을 한다.
후위 증가 연산자가 우선순위가 더 높다는 의미는 1 증가시킨 연산 결과를 우선적으로 받는다는 의미가 아닙니다. 즉, start가 1 증가된 결과값을 * 간접참조 하게된다는 의미가 아니에요. 위 1,2 일련의 전체 과정을 먼저 해준다는 뜻입니다. 후위 증가 연산자는 시스템 내부적으로 기존의 값을 복사하여 사본을 임시적으로 만들어 놓고 그 후에 원본을 1 증가시키는 과정을 거칩니다. 이 후위 연산의 결과를 피연산자로 쓰는 다른 연산자에선 기존값을 보관중인 이 임시로 만든 사본을 리턴받아 이걸 가지고 연산하게 되요.
(+ 덧붙여서 전위 증가 연산자는 기존 값 복사해둘 사본이 필요 없어서 그냥 바로 원본을 증가시켜버리고 이를 리턴합니다.)
*start++ 이 과정을 자세히 설명 드리자면, 우선 후위 증가연산자가 우선순위가 더 높으므로 start++가 먼저 실행이 됩니다. start의 기존 값을 복사하여 임시 사본을 만들고 리턴합니다. 그리고 원본 start가 1 증가됩니다. 이제 *start 가 실행될 차례입니다. 실제 start 원본은 1 증가되었지만 * 연산자는 start가 증가되기 전에 기존의 start 값을 복사해서 만들어지고 리턴된 사본을 간접참조 하게 됩니다.
- ptr_a 변수(포인터)의 초기값은 a 의 주소값(010FFDF"8")입니다.
- 후위증가 연산이 우선적으로 실행되므로 ptr_a++ 을 통해, 시스템 내부적으로 기존 ptr_a 값이 사본으로 만들어지고 이를 리턴합니다. 그리고 나서 ptr_a 원본은 1 증가됩니다. * 연산자는 리턴된 이 ptr_a 증가 전 값의 "사본"을 전달 받습니다.
- 원본 ptr_a 는 1 증가되어 010FFDF"C" 이 되었고 (int 포인터이므로 주소값 자체는 4 만큼 증가한 셈입니다. 16진수로 8 + 4 = C) * 연산자는 ptr_a 의 기존값 사본인 010FFDF8 주소를 간접참조 하게 되어 최종적으로 a의 값인 2 를 리턴하게 됩니다.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
51
3
main 함수에서 왜 int만 선언이 되는걸까요
1
54
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
54
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
48
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
136
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
75
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





