2014-02-09 2 views
-2

코드 :루프 구조 : FOR C에서

int main() 
{ 
    int i; 
    char p[]="Hello",b[]="World!"; 
    for (i = 0; *p != '\0' ; i++, p+1); //what does the p+1 after , 
    printf("%s%s",p,b); 
    return 0; 
} 

내 질문은이 프로그램이 종료되지 않기 때문에 루프가 작동을 위해 정확하게 수행하는 방법입니다,하지만 난

for(i=0; *p != '\0'; i++, printf("hi")); //this prints out hi 
+1

'p'에 지정하지 않으면 값에 1을 더한 다음 버립니다. 아마도'p + = 1' 또는'p ++'를 의미했을 것입니다. – Kninnug

+0

물론'p '를 변경하지 않았기 때문입니다. –

+0

왜 당신은 아무것도 사용하지 않는 변수'i'를 가지고 있습니까? – geoffspear

답변

1

를 작성하는 경우 당신은 평가 p+1하지만 당신에게 변수 p에 저장하지 마십시오. 따라서 문자열을 "따라 다니지"않고 종료 문자를 찾지 않습니다.

p+1을 평가하는 것은 p++ (p를 평가 한 다음 p를 증가시키고 p에 다시 저장함)과 동일하지 않습니다.

또한 - for 문 바로 뒤에 세미콜론이있어서 루프가 종료 될 때까지 아무 것도 실행하지 않습니다. 즉, printf("%s%s",p,b); 문은 for 루프의 일부가 아닙니다 (궁금한 점을 위해서).

당신은 당신에게 루프를 변경하여 이것이 사실 볼 수 있습니다 :

char* x; 
for (i = 0; i<5 ; i++, x=p+1) { 
    printf("%s\n", x); 
} 

어떻게되는지 :

for (i = 0; *p != '\0' ; i++, p++) { 
    printf("%s %s\n",p,b); 
} 

:

ello 
llo 
lo 
o 

당신은 일반적으로 같은 것을 할 것 당신을 데려 간다

Hello World 
ello World 
llo World 
lo World 
o World 
0

i++, p+1의 쉼표 연산자는 단순히 i의 증분을 계산하지만 결과는 p+1입니다. 아마도 i++, p++을 의미했을 것입니다.