Tôi đã đặt bộ đệm thành kích thước 100. Tôi hiển thị bộ đệm trong chức năng chính nơi bộ đệm được khai báo. Tuy nhiên, khi tôi vượt qua bộ đệm để chức năng và nhận được sizeof '4', Tôi đã nghĩ nó nên là 100, vì đó là kích thước của bộ đệm mà tôi tạo ra trong chính. đầu ra: kích thước bộ đệm: 100 sizeof (đệm): 4chuyển bộ đệm char sang các chức năng và nhận kích thước của bộ đệm
#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));
}
Trong chính() bạn khai báo rõ ràng một mảng, trong khi trong load_buffer() bạn khai báo một con trỏ. Sự khác biệt là, trong main() trình biên dịch biết rằng bộ đệm là một mảng, nhưng trong load_buffer() trình biên dịch không biết bộ đệm là từ một mảng hay một bộ nhớ được phân bổ trong bộ nhớ, hay cấu trúc hay bất cứ thứ gì . Trình biên dịch chỉ biết địa chỉ bộ nhớ (do đó một con trỏ), vì vậy sizeof() trả về kích thước của địa chỉ bộ nhớ, dài 4 byte (vì nó là một máy 32 bit, nếu nó là một máy 64 bit, nó sẽ là 8 byte dài). Hy vọng điều này sẽ giúp hiểu thêm một chút. – AndaluZ
Thay vì hàm sizeof(), sử dụng strlen(), sau đó nó trả về kích thước của giá trị con trỏ. – NandhaKumar