programing

재미 함수의 반환 값이 7이 아닌 8인 이유는 무엇입니까?

instargram 2023. 10. 14. 09:32
반응형

재미 함수의 반환 값이 7이 아닌 8인 이유는 무엇입니까?

C 함수의 쉼표 분리 반환 인수를 참조하면,

x=x+2,x+1;

로 평가될 것입니다.

x=x+2; 

단, 다음 코드의 경우

#include<stdlib.h>
#include<stdio.h>

int fun(int x)
{
    return (x=x+2,x+1); //[A]
}

int main()
{
   int x=5;
   x=fun(x);
   printf("%d",x); // Output is 8
}

[A] 선은 다음과 같이 평가되어야 하지 않습니다.

x=x+2;

부여x = 7

성명서return (x = x + 2, x + 1);는 다음과 같습니다.

x = x + 2; // x == 7
return x + 1; // returns 8

글을 쓸때return (x=x+2,x+1), 첫번째 표현이 먼저 평가되기 때문에x=x+2가 평가되어 x가 7과 같아지는 부작용이 발생합니다.그런 다음 두 번째 식을 평가하여 반환하므로 함수가 x+1을 반환하므로 8을 반환합니다.

만약 당신이 글을 썼다면return (x+2,x+1);, 결과는 6 이었을 것이다 왜냐하면 첫번째 표현이x+2부작용은 없습니다

두 부분 모두return각각 평가되고 마지막 지침의 결과가 반환됩니다.

처음에는 다음이 있습니다.

x = x + 2 // 7

지금이다x에 업데이트됩니다.7두 번째 평가 전에 다음 사항을 제공합니다.

x + 1 // 7 + 1 = 8

그리고 마침내 돌아옵니다.8.

더 나은 이해를 위해 다음과 같이 중간 변수의 경우를 생각해 보십시오.

return (y = x + 2, y + 1);

편리하게 연결된 QA(Q

쉼표 연산자는 일련의 식을 평가합니다.쉼표 그룹의 값은 목록의 마지막 요소의 값입니다.

그래서 의 가치는

x+2,x+1;

x+1부작용도 없고요


샘플 코드:

#include<stdio.h>
int main(int argc, char * argv){
    int x;
    x = 0;
    x = (x+2, x+1);
    printf("%d\n", x);
    return 0;
}

결과를 보다1달리다 보면


하지만 당신이 할때는

return (x=x+2, x+1)

부작용이 있습니다.x먼저 2개씩 증가하고, 그 다음엔x는 1씩 증가하고 결과는 반환됩니다.

그것은 운영자 우선순위의 문제입니다.

x=x+2,x+1다음과 같이 평가됩니다.(x=x+2), (x+1)로는 아니지만x=(x+2,x+1)

다른 사용자들이 언급한 바와 같이 명령 흐름은 왼쪽에서 오른쪽으로 이동하며, 경우에는return, 가장 오른쪽에 있는 연산자의 가치를 되돌려 줄 것입니다.연산자 앞에 쓰고 쉼표로 구분하는 것은 줄로 쓴 표현과 다를 바 없습니다.예:

return (x = x + 2, x = x - 5, x + 1);

아래 코드는 동일한 결과를 가져옵니다.

x = x + 2;  
x = x - 5;
return x + 1;

위해서x = 0, 이것은 돌아올 것입니다.-2. 두 코드 모두, 우리가 변경할 경우x = x - 5로.x - 5, 즉, 우리는 뺄셈을 하고 있습니다.5부터x그 결과를 어디에도 저장하지 않습니다. 반환 값은x로 변경됩니다.3따라서 동등성을 확인할 수 있습니다.

쉼표 연산자가 코드에 시퀀스 포인트를 도입합니다.문은 다음 순서로 평가됩니다.

  1. x = x + 2, x인에fun7 입니다.

  2. x + 1 은 8 로됩니다.

명확하게 설명하자면, 연산자 우선 순위를 보여주는 괄호가 쳐진 버전은 다음과 같습니다.

return (x=x+2),x+1;

왼쪽 표현은 평가되고 그 가치는 버려집니다.오른쪽 식의 값은 반환되는 값입니다.

언급URL : https://stackoverflow.com/questions/57939065/why-is-the-return-value-of-the-fun-function-8-instead-of-7

반응형