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