나는 그물에 sizeof (str-1) 몇 시간을 보았지만 결코 그것을 사용하지 않았다. stf가 문자 배열 인 경우 sizeof (str-1)와 sizeof (str) -1의 차이점을 궁금합니다. char str [] = "Hello";sizeof (str -1)와 sizeof (str) -1의 차이점은 무엇입니까?
2
A
답변
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
}
인수는 포인터 연산의 결과이기 때문에 첫 번째 인스턴스가 포인터의 크기를 제공되고, 상기 제 문자열의 크기, 이하를 제공한다.
(포인터의 크기는 다를 수 있습니다. :-))