thể trùng lặp:
How to find the sizeof(a pointer pointing to an array)C, malloc() và chiều dài mảng
tôi đang học làm thế nào để tạo ra một mảng động trong C, nhưng đã gặp sự cố tôi có thể 't tìm ra.
Nếu tôi sử dụng mã:
int num[10];
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
tôi nhận được kết quả:
sizeof num = 40
sizeof num[0] = 4
Đây là những gì tôi mong đợi xảy ra. Tuy nhiên nếu tôi malloc kích thước của mảng như:
int *num;
num = malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
Sau đó, tôi nhận được đầu ra:
sizeof num = 8
sizeof num[0] = 4
Tôi tò mò muốn biết lý do tại sao kích thước của mảng là 40 khi tôi sử dụng cố định phương pháp chiều dài, nhưng không phải khi tôi sử dụng malloc()
.
'num' là con trỏ tới int trong trường hợp thứ hai và kích thước của nó phụ thuộc vào máy tức là 32 bit, nó là 4 byte và cho 64 bit là 8 byte. Trong trường hợp 1 chữ số không phải là con trỏ, nó là' cơ sở address' của mảng vì vậy 'sizeof()' cho tổng kích thước của mảng. . – krpra