버퍼 크기를 100으로 설정했습니다. 버퍼가 선언 된 main 함수에 버퍼를 표시합니다. 그러나 함수에 버퍼를 전달하고 sizeof '4'를 얻었을 때 나는 그것이메인에 생성 된 버퍼의 크기이므로 100이어야한다고 생각했습니다. 출력 : 버퍼 크기 : 100 를 sizeof (버퍼) (4)함수에 char 버퍼를 전달하고 버퍼 크기를 가져옵니다.
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
main()에서 명시 적으로 배열을 선언하고 load_buffer()에서 포인터를 선언했습니다. 차이점은 main()에서 버퍼가 배열임을 알지만, load_buffer()에서는 컴파일러가 버퍼가 배열인지 또는 힙에 메모리가 할당되었는지 또는 구조체인지 여부를 알지 못합니다 . 컴파일러는 메모리 주소 (포인터) 만 알고 있으므로 sizeof()는 메모리 주소의 크기를 4 바이트로 반환합니다 (32 비트 컴퓨터이기 때문에 64 비트 컴퓨터 인 경우 8 비트입니다. 바이트 길이). 희망이 좀 더 이해하는 데 도움이됩니다. – AndaluZ
sizeof() 함수 대신 strlen()을 사용하면 포인터 값의 크기를 반환합니다. – NandhaKumar