저는 K & R 서적에서 C를 배우는 파이썬 프로그래머입니다. 이것은 매우 사소한 질문처럼 보일 것입니다,하지만 그럼에도 불구하고 나는 곤란합니다. atoi() 함수를 구현하는 K & R (RIP Ritchie!) 서적의 코드 스 니펫이 첨부되어 있습니다.atoi() 함수 이해하기
atoi(s) /*convert s to integer */
char s[];
{
int i, n, sign;
for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++)
; /* skip whitespace */
sign = 1;
if (s[i] == '+' || s[i] = '-') /* sign */
sign = (s[i++] == '+') ? 1 : -1;
for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10 * n + s[i] - '0';
return (sign * n);
}
내 질문 :
1) 루프 '에 대한'최초의 유효 characaters의 수를 계산 이외의 어떤 목적을 제공합니까?
2) (1)이 참이면 첫 번째 루프는 'i'값을 유효한 문자 수로 설정합니다. 두 번째 for 루프는 재설정하지 않고 i를 0으로 어떻게 작동합니까?
예를 들어 함수의 입력으로 '2992'를 입력합니다. 첫 번째 for 루프는 i를 3으로 설정하므로 나머지 함수는 어떻게 작동합니까? 내 기초가 엉망이 될 수도 있지만 도움이 될 것입니다. 감사, -Creig
나는 C가 _that_ terrible이라는 것을 알지 못했습니다. –
코드 조각을 이해하는 가장 좋은 방법은 디버거 (예 : gdb)로 코드를 실행하고 단계별로 진행하는 것입니다. 또한 내부의 코드와 주석을 읽는 것이 도움이 될 수 있습니다. – eyalm
@PatrickB .: 그게 아주 오래되었습니다. C. 현대 C는 ... 똑같은 것처럼 보입니다. (이제는 훨씬 더 명확한 int atoi (const char * s) 함수 서명을 제외하고). – Mat