Để thực hiện được việc đếm số lượng phần tử có trong mảng đối với ngôn ngữ C, ta sẽ dùng hàm sizeof() và macro (được dùng để chỉ những hàm được viết ở phần Preprocessor).
Giải thích
Ví dụ ta có 1 mảng số nguyên như dưới đây:
int a[5] = { 1, 4, 5, 7, 9 };
Đầu tiên ta sẽ lấy kích thước của mảng:
size_t sizeOfArray = sizeof(a);
Sau đó sẽ lấy kích thước của từng phần tử, kích thước từng phần tử sẽ bằng với kích thước kiểu dữ của mảng:
size_t sizeOfElementInArray = sizeof(int); // Vì trong ví dụ mình sử dụng kiểu int
Tuy nhiên, mình sẽ thay đổi một chút để có thể khi xây dựng thành macro, thì dùng được cho nhiều kiểu dữ liệu:
size_t sizeOfElementInArray = sizeof(a[0]);
Từ đó ta có thể suy ra: Số lượng phần tử = Kích thước của mảng / Kích thước của phần tử trong mảng
size_t n = sizeOfArray / sizeOfElementInArray;
Ta có thể viết gọn lại:
size_t n = sizeof(a) / sizeof(a[0]);
Xây dựng macro:
#define LENGHT_OF_ARRAY(x) (sizeof(x) / sizeof(x[0]))
Đây là phần code đầy đủ:
#include<stdio.h>
#include<conio.h>
#define LENGHT_OF_ARRAY(x) (sizeof(x) / sizeof(x[0])) // macro
void main() {
int number[6] = { 0, 2, 4, 5, 6, 6 };
int len = (int)LENGHT_OF_ARRAY(number);
printf("So phan tu cua mang so nguyen la: %d\n", len); // Kết quả: 6
char ch[5] = { 'a', 'b', 'c', 'b'};
len = (int)LENGHT_OF_ARRAY(ch);
printf("So phan tu cua mang ky tu la: %d\n", len); // Kết quả: 5
char str[3][6] = { "phan", "xuan", "chanh" };
len = (int)LENGHT_OF_ARRAY(str);
printf("So phan tu cua mang chuoi ky tu: %d\n", len); // Kết quả: 3
_getch();
}