2012-03-27 4 views

답변

9

sizeof(str)은 배열 str의 크기입니다. 이 경우 6 (nul 터미네이터 포함)입니다. 따라서 sizeof(str)-1은 5입니다 (nul 터미네이터는 제외).

str-1은 배열 - 포인터 감쇠로 인해 C 유형이 char*이고 C++가 const char*입니다. 그래서 sizeof(str-1)은 char-to-pointer의 크기입니다. str을 정의하는 데 사용 된 특정 문자열의 길이와 아무 관련이 없습니다.

제쳐두고 계산 str-1은 정의되지 않은 동작입니다. 편리하게 sizeof은 피연산자를 평가하지 않으므로 여기서 문제가되지 않습니다.

5

(64 비트 용으로 컴파일 할 때 디버깅에 따르면) 큰 차이가 있습니다.

int main(void) 
{ 
    char str[] = "Hello"; 

    sizeof(str-1); //gives 8 
    strSize = sizeof(str) - 1; //gives 5 
} 

인수는 포인터 연산의 결과이기 때문에 첫 번째 인스턴스가 포인터의 크기를 제공되고, 상기 제 문자열의 크기, 이하를 제공한다.

(포인터의 크기는 다를 수 있습니다. :-))