2011-10-13 4 views
2

텍스트 문자열을 구문 분석하고 사람이 읽을 수있는 o/p를 생성하는 C 프로그램을 변환 중입니다. C를 Java로 변환 - 포인터 쿼리

은 거의 다하지만,
token[i++] = c = toupper(*char_ptr++); 
if (c == '\0') 
    { 
    char_ptr--; 
    return(0); 
    } 

*char_ptr++ 


char_ptr--의 차이를 이해하는 데 문제가 내가 *char_ptr++이 effectivley 다음 문자를 가리 킵니다 생각, 내가 잘못 알고있어 '문자열'에? 그렇다면 char_ptr--의 기능은 무엇입니까?

감사합니다.

답변

1

++이 포인터를 증가시키고 다음 문자를 가리키는 것과 같은 방식으로 --은 이전 문자를 가리키면서이를 감소시킵니다. 이 경우 종료 null에서 마지막 실제 문자로 되돌립니다.

0

네, 맞습니다. 그것은 "문자열"로 "엿보기"한 다음 문자열이 끝났을 때의 위치로 되돌아가는 방법입니다.

3

로 시선 *char_ptr++ :

char tmp = *char_ptr; 
char_ptr++; 
c = toupper(tmp); 

그래서 효과적으로 현재의 문자를 가져옵니다, 그리고 하나를 사용하여 포인터를 진행시킨다. ++ 연산자가 단항 *보다 높은 우선 순위를 가지므로 이러한 표현식은 *(char_ptr++) 순으로 계산됩니다.

먼저 증분이 적용되지만 조작 후 앞에 접미어 ++ 연산자가 결과를 반환하므로 참조 주소가 * 인 이전 주소에 적용됩니다.

char_ptr--은 단순히 포인터를 1 줄입니다.

+0

아 - 그래서 char_ptr-- 효과적입니다 * char_ptr-- –

+0

아니요, 첫 번째는'n -'을 의미합니다. 두 번째는'arr [n -]' – Dave

+0

흠 - 그게 나 혼란 스럽네. :) 문자열이 주어진다면, * char_ptr ++에 대한 연속적인 호출은 다음 문자를 줄 것이다. * char_ptr-- 이전을 제공 할 것으로 기대합니다. 그렇다면 char_ptr은 무엇을 하는가? –

0

이 질문은 우선 순위 규칙에 의해 해결됩니다. 표현

*char_ptr++ 

는 "가리키고 PTR 문자 뒤의 문자를"의미

*(char_ptr++) 

에 해결됩니다. 따라서 c가 '\ 0'(영)과 같을 때 포인터는 감소하여 이전 문자를 가리 킵니다. 마침내 0이있을 때마다 이전 문자로 점차 감소하므로 char_ptr은 블록을 마지막으로 실행하는 동안 가리킨 점을 가리 킵니다.

1

자바로 변환 중이므로 포인터를 제거해야하므로 Java에서는 지원하지 않습니다.

token[i++] = c = toupper(*char_ptr++); 
if (c == '\0') 
{ 
    char_ptr--; 
    return(0); 
} 

가능성이 말하는 그 위에 선언의 일종을 가지고 대신

char* char_ptr = some_array; 

, 즉

int pos = 0; 

수 있습니다 그리고 위의 코드가된다 :

token[i++] = c = toupper(some_array[pos++]); 
if (c == '\0') 
{ 
    pos--; 
    return(0); 
} 
+0

글쎄 그게 내가 한 일이야 :) 문제는 다른 곳에서해야합니다 : ( –

+0

무엇이 문제입니까? 프로그램이 어떻게 동작합니까? – Dave

+0

배열이 범위를 벗어났습니다. 결국 나타납니다. –