Đối với mảng động ( malloc hoặc C ++ mới ), bạn cần lưu trữ kích thước của mảng như được đề cập bởi người khác hoặc có thể xây dựng cấu trúc trình quản lý mảng xử lý thêm, xóa, đếm, v.v. Thật không may C không làm điều này gần như C ++ vì về cơ bản bạn phải xây dựng nó cho từng loại mảng khác nhau mà bạn đang lưu trữ sẽ cồng kềnh nếu bạn có nhiều loại mảng mà bạn cần quản lý.
Đối với mảng tĩnh, chẳng hạn như mảng trong ví dụ của bạn, có một macro phổ biến được sử dụng để lấy kích thước, nhưng đó là không được khuyến khích vì nó không kiểm tra xem tham số có thực sự là mảng tĩnh hay không. Macro được sử dụng trong mã thực, ví dụ, trong các tiêu đề nhân Linux mặc dù nó có thể hơi khác so với bên dưới:
#if !defined(ARRAY_SIZE)
#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0]))
#endif
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", ARRAY_SIZE(days));
printf("%u\n", sizeof(ptr));
return 0;
}
Bạn có thể google vì những lý do để cảnh giác với các macro như thế này. Hãy cẩn thận.
Nếu có thể, stdlib C ++ như vector sẽ an toàn hơn và dễ sử dụng hơn.