1. prinf 함수의 매개변수에는 포인터 표현식이 포함되어 있습니다. 코드 연산 결과는 분명히 왼쪽에서 오른쪽으로 계산되지 않습니다.
으아아아给我你的怀抱2017-06-27 09:20:57
하나의 명령문에서 변수를 여러 번 변경하는 것은 정의되지 않은 동작이며 플랫폼에 따라 결과가 다를 수 있습니다. 이 질문은 말이 되지 않습니다.
学习ing2017-06-27 09:20:57
printf{"%d",++i}
두 가지 작업을 의미합니다
먼저 i=i+1을 실행한 다음 i를 출력합니다
i++는
을 의미합니다.첫 번째 출력 후 i=i+1
을 실행합니다.某草草2017-06-27 09:20:57
함수 매개변수의 작동 순서는 함수의 내부 논리와 거의 관련이 없습니다. 스택에 푸시되기 전(함수가 실행되기 전)++p
,函数结束后,再计算p++
을 계산해야 합니다. 구체적인 순서를 알고 싶으시면 어셈블리 코드를 참고하시면 됩니다. (구체적인 의미는 내일 업데이트 예정입니다 죄송합니다)
여담:
결과에 나타나는 2와 3은 여전히 설명이 가능합니다.
4 참 이상하네요. 굳이 설명하자면 *(++p)++
괄호 밖의 ++
도 p<를 의미합니다. /code> 작동합니다,
*(++p)++
括号外面的++
也对p
起作用了,
但是形如p++
运算符,应该在语句结束后才自增的,所以这样解释明显不对。
我在Cygwin + gcc (GCC) 5.4.0
하지만 p++
형식의 연산자는 명령문이 끝난 후 증가해야 하므로 이 설명은 명백히 잘못된 것입니다.
Cygwin + gcc(GCC) 5.4.0
환경에서 실행한 결과는 다음과 같습니다. 4 어떤 환경이 사용되나요? 🎜
으아악ringa_lee2017-06-27 09:20:57
함수 매개변수가 스택에 푸시되는 순서는 확실합니다. 단지参数的求值顺序是未指定
的,
编译器只保证在printf
调用之前,所有参数的值是已知的
这方面的资料可以搜索序列点(Sequence Point)