찾다

 >  Q&A  >  본문

C/C++ 언어의 printf 함수에서 포인터가 가리키는 배열의 값을 출력할 때 포인터의 값이 왜 이렇게 변하는 걸까요?

1. prinf 함수의 매개변수에는 포인터 표현식이 포함되어 있습니다. 코드 연산 결과는 분명히 왼쪽에서 오른쪽으로 계산되지 않습니다.

으아아아

大家讲道理大家讲道理2732일 전1515

모든 응답(4)나는 대답할 것이다

  • 给我你的怀抱

    给我你的怀抱2017-06-27 09:20:57

    하나의 명령문에서 변수를 여러 번 변경하는 것은 정의되지 않은 동작이며 플랫폼에 따라 결과가 다를 수 있습니다. 이 질문은 말이 되지 않습니다.

    회신하다
    0
  • 学习ing

    学习ing2017-06-27 09:20:57

    printf{"%d",++i} 두 가지 작업을 의미합니다

    먼저 i=i+1을 실행한 다음 i를 출력합니다

    i++는

    을 의미합니다.

    첫 번째 출력 후 i=i+1

    을 실행합니다.

    회신하다
    0
  • 某草草

    某草草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 어떤 환경이 사용되나요? 🎜 으아악

    회신하다
    0
  • ringa_lee

    ringa_lee2017-06-27 09:20:57

    함수 매개변수가 스택에 푸시되는 순서는 확실합니다. 단지参数的求值顺序是未指定的,
    编译器只保证在printf调用之前,所有参数的值是已知的
    这方面的资料可以搜索序列点(Sequence Point)

    회신하다
    0
  • 취소회신하다