#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입니까?
#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입니까?
당신은 말한다 코드가 있습니다
x = 10;
x = 15;
그 다음 인쇄의 X를.
그런 다음이 함수를 두 번 호출합니다.
왜 다시 두 번째 인쇄물이 다른 결과를 가져올 것이라고 생각합니까? 첫 번째 것에 비해?!
다음과 같이 할당합니다. 10. Plus 5. 그러면 왜 20에 도달해야합니까?
힌트 -에 코드를 변경해보십시오 :
static int x = 10;
x += 5;
길고도 짧은 이야기 : 재 이를 할당하는 이 초기화로 다시하지 같은 일을합니다!
x는 정적이므로 먼저 15를 인쇄해야합니다. 따라서 x가 정적이므로 20을 인쇄해야합니까? –
업데이트 된 답변보기 요점은 : 당신이 "다시 초기화하지 않는"것입니다. 다시 할당하고 있습니다. 그것은 같은 것이 아닙니다. 여러분은'x = x + 5'가 x에 새로운 값을 주길 기대합니다. 그러나'x = 10'은 효과가 없다고 기대하십니까? – GhostCat
여기서 static
변수는 x
으로 선언 (초기화 됨)되고, 10
은 초기화되지 않습니다.
따라서 프로그램의 출력이 및 15
입니다.
초기화와 할당이 모두 다릅니다. 이 stack overflow question을 읽으십시오.
나는 이것이 당신을 도울 것이고 당신의 의심을 분명히하기를 희망합니다.
정적이어서 x는 다시 초기화되지 않습니다. –
@DhruvBhardwaj는 '다시 초기화'하고 '다시 할당'은 다른 작업입니다. –
더 간단한 방법으로 설명 할 수 있습니까? –
정적 변수의 재 할당 및 재 초기화와 혼동을 느낀다고 생각합니다. 정적 변수는 함수가 호출 될 때마다 다시 초기화되지 않는다는 것을 배웠던 것입니다. 그러므로 당신은 대답 15을 기대하고 있습니다. & 20.
하지만, x의 값을 매번 10 번씩 다시 할당하는 것이 있습니다. 다음과 같이 코드를 수정하면 기대 한 바를 달성 할 수 있습니다.
static int x=10;
x+=5;
여기서 x는 처음으로 10으로 초기화됩니다. 그런 다음, 모든 함수 호출마다 5 씩 증가합니다.
희망이 있으면 도움이되며 의심의 여지가 없으시기 바랍니다.
고마워, 지금 당장. –
. 천만에. 투표 도움이되는 대답은 항상 받아 들일 수 있습니다. –
코드를 포맷하십시오. – Blorgbeard
@Blorgbeard 출력을 알려주시겠습니까? –
그가 의미하는 바는 다음과 같습니다. SO는 좋은 소스 코드를 적절하게 형식화하기 위해 ** 마크 다운 **을했습니다. 이전에 ** 코드를 게시하는 것과 같은 것을 배우기 위해 도움말 센터로 돌아가고 싶습니다. 예를 들어, 내 대답의 두 줄이 어떻게 포맷되는지보십시오! – GhostCat