6-11 질문
안녕하세요! 다음 코드를 제 스스로 분석해봤는데, 정확한 분석이 맞는지 헷갈려서 질문드립니다.

(1)
Comma 연산자는 Assignment 연산자보다 서열이 낮은 것으로 알고 있습니다.
1번 예시에서 콤마가 작동하는 시기는 z에 x의 값이 대입되고, y에 값 2가 대입된 뒤인가요?
콤마 연산자는 왼쪽에서 오른쪽으로 계산을 하는데, 이미 대입연산자에 의해 각각 값이 대입된 변수 z와 y를 또 계산한다는 것이 잘 이해되지 않습니다.
이 경우의 콤마 연산자의 계산이란 무엇인지 알려주시면 감사하겠습니다.
(2)
1번 예시와 2번 예시의 차이점은 무엇이 먼저 계산되느냐 일까요?
즉 1번 예시에서는 x에 1이 대입되고, 그 값이 다시 x에 대입된 뒤, y에 2가 대입되고, 콤마 연산자가 작동한다면,
2번 예시에서는 x에 1이 대입되고, y에 2가 대입된 뒤, x의 값이 z에 대입되고, 콤마 연산자가 작동하는 건가요?
늘 친절한 답변 감사합니다.
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
우선, , 콤마 연산자와 = 대입 연산자에 대해서 설명드린 후, 코드에 대해서 답변드리도록 하겠습니다.
,콤마 연산자
: 콤마 연산자는 왼쪽에서 오른쪽으로 표현식을 계산합니다. 그리고 콤마 연산자는 표현식의 결과를 반환하는데, 이 결과는 가장 오른쪽에 있는 표현식의 결과입니다.=대입 연산자
: 대입 연산자의 경우, 오른쪽에서 왼쪽으로 표현식이 계산되며, 결과는 왼쪽의 변수에 대입됩니다.연산자의 우선순위는
,연산자가=연산자보다 낮습니다.
질문(1)
: z = x = 1, y = 2; 는 콤마 연산자를 사용하여 두 개의 대입문을 결합합니다.
이 경우, 첫 번째 대입문 x = 1 이 먼저 계산되고 그 결과값 1 이 z 에 대입됩니다., 연산자 오른쪽의 두 번째 대입문 y = 2 가 계산되어 y 에 2 가 저장됩니다.
질문(2)
: 연산자의 우선순위를 좀 더 명확하게 한다는 점에 의미가 있습니다.
1번 코드라인에서는 z = x = 1 이 계산되고, , 연산자 이후의 y = 2 가 계산됩니다.
2번 코드라인에서서도 동일한 순서와 결과를 얻지만, 연산자의 우선순위를 좀 더 명확히 표현합니다.
콤마 연산자는 우선순위가 가장 낮은 연산자 중 하나이기 때문에, 복잡한 표현식에서 콤마 연산자를 사용할 때는 괄호를 적절히 사용하여 연산의 순서를 명확히 해주는 것이 좋습니다.
예를 들어, z = (x = 1, x + 2); 코드 라인의 경우 x = 1 과 x + 2 두 표현식은 콤마 연산자에 의해 연결되며, x = 1 이 먼저 계산되고, 그 다음 x + 2 가 계산됩니다.
그리고, 콤마 연산자의 결과값 x + 2 즉, 3이 z 에 대입됩니다.
예시 코드와 출력 결과를 첨부드립니다.
#include <stdio.h>
int main()
{
int x = 0, y = 0, z = 0;
z = x = 1, y = 2;
printf("%-25s x = %d, y = %d, z = %d \n", "z = x = 1, y = 2", x, y, z);
z = (x = 1), (y = 2);
printf("%-25s x = %d, y = %d, z = %d \n", "z = (x = 1), (y = 2)", x, y, z);
z = ((x = 1), (y = 2));
printf("%-25s x = %d, y = %d, z = %d \n", "z = ((x = 1), (y = 2))", x, y, z);
z = (x = 1, x + 2);
printf("%-25s x = %d, y = %d, z = %d \n", "z = (x = 1, x + 2)", x, y, z);
return 0;
}출력 결과

Export template 안됨
1
30
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
57
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
79
2
c = TWO * (a+b); 에서 a와 b는?
1
60
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





