2016-08-31 3 views
-1
#include<stdio.h> 

void print(); 

int main(){ 

    print();  
    print();  
    return 0;  
} 

void print(){ 

    static int x;  
    x=10;  
    x+=5;  
    printf("%d\t",x); 

} 

출력 15 15왜 출력이 15 15 대신 15 15입니까?

+0

코드를 포맷하십시오. – Blorgbeard

+0

@Blorgbeard 출력을 알려주시겠습니까? –

+0

그가 의미하는 바는 다음과 같습니다. SO는 좋은 소스 코드를 적절하게 형식화하기 위해 ** 마크 다운 **을했습니다. 이전에 ** 코드를 게시하는 것과 같은 것을 배우기 위해 도움말 센터로 돌아가고 싶습니다. 예를 들어, 내 대답의 두 줄이 어떻게 포맷되는지보십시오! – GhostCat

답변

4

당신은 말한다 코드가 있습니다

x = 10; 
x = 15; 

그 다음 인쇄의 X를.

그런 다음이 함수를 두 번 호출합니다.

왜 다시 두 번째 인쇄물이 다른 결과를 가져올 것이라고 생각합니까? 첫 번째 것에 비해?!

다음과 같이 할당합니다. 10. Plus 5. 그러면 왜 20에 도달해야합니까?

힌트 -에 코드를 변경해보십시오 :

static int x = 10; 
x += 5; 

길고도 짧은 이야기 : 재 를 할당하는 초기화로 다시하지 같은 일을합니다!

+0

x는 정적이므로 먼저 15를 인쇄해야합니다. 따라서 x가 정적이므로 20을 인쇄해야합니까? –

+1

업데이트 된 답변보기 요점은 : 당신이 "다시 초기화하지 않는"것입니다. 다시 할당하고 있습니다. 그것은 같은 것이 아닙니다. 여러분은'x = x + 5'가 x에 새로운 값을 주길 기대합니다. 그러나'x = 10'은 효과가 없다고 기대하십니까? – GhostCat

0

여기서 static 변수는 x으로 선언 (초기화 됨)되고, 10은 초기화되지 않습니다.

따라서 프로그램의 출력이 및 15입니다.

초기화와 할당이 모두 다릅니다. 이 stack overflow question을 읽으십시오.

나는 이것이 당신을 도울 것이고 당신의 의심을 분명히하기를 희망합니다.

+0

정적이어서 x는 다시 초기화되지 않습니다. –

+1

@DhruvBhardwaj는 '다시 초기화'하고 '다시 할당'은 다른 작업입니다. –

+0

더 간단한 방법으로 설명 할 수 있습니까? –

0

정적 변수의 재 할당 및 재 초기화와 혼동을 느낀다고 생각합니다. 정적 변수는 함수가 호출 될 때마다 다시 초기화되지 않는다는 것을 배웠던 것입니다. 그러므로 당신은 대답 15을 기대하고 있습니다. & 20.

하지만, x의 값을 매번 10 번씩 다시 할당하는 것이 있습니다. 다음과 같이 코드를 수정하면 기대 한 바를 달성 할 수 있습니다.

static int x=10; 
x+=5; 

여기서 x는 처음으로 10으로 초기화됩니다. 그런 다음, 모든 함수 호출마다 5 씩 증가합니다.

희망이 있으면 도움이되며 의심의 여지가 없으시기 바랍니다.

+0

고마워, 지금 당장. –

+0

. 천만에. 투표 도움이되는 대답은 항상 받아 들일 수 있습니다. –