Đi qua một số câu hỏi phỏng vấn C, tôi đã tìm thấy một câu hỏi cho biết "Làm thế nào để tìm kích thước của một mảng trong C mà không cần sử dụng toán tử sizeof?", Với giải pháp sau. Nó hoạt động, nhưng tôi không thể hiểu tại sao.
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
Như mong đợi, nó trả về 5.
chỉnh sửa: mọi người đã chỉ ra câu trả lời này , nhưng cú pháp không khác một chút, tức là phương pháp lập chỉ mục
size = (&arr)[1] - arr;
vì vậy tôi tin rằng cả hai câu hỏi đều hợp lệ và có cách tiếp cận vấn đề hơi khác nhau. Cảm ơn tất cả các bạn đã giúp đỡ rất nhiều và giải thích kỹ lưỡng!
*((*(&array + 1)) - 1)
an toàn để sử dụng để có được phần tử cuối cùng của mảng tự động không? . tl; dr *(&a + 1)
gọi Behvaior không xác định
(ptr)[x]
giống nhau *((ptr) + x)
.
&a + 1
không chỉ đến bất kỳ đối tượng hợp lệ, vì vậy nó không hợp lệ.