1、使用 sizeof 计算静态数组大小
对于在编译时确定的静态数组,sizeof
可以用来确定数组的总大小(以字节为单位)。然后,将总字节数除以数组元素的字节数即可得到元素数量。
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
// 获取数组元素数量
int arr_size = sizeof(arr) / sizeof(arr[0]);
printf("Array size: %d\n", arr_size); // 输出 5
return 0;
}
2、 在函数中传递数组大小
数组作为函数参数传递时,实际上传递的是指向数组首元素的指针,因此无法使用 sizeof
来计算数组的大小。此时,可以将数组的大小作为额外参数传递给函数。
#include <stdio.h>
void printArraySize(int *arr, int size) {
printf("Array size: %d\n", size);
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int arr_size = sizeof(arr) / sizeof(arr[0]);
printArraySize(arr, arr_size);
return 0;
}
3、动态分配数组的大小
对于通过 malloc 或其他动态分配函数分配的数组,sizeof
只能返回指针的大小,而不能获取实际分配的内存大小。因此,动态数组的大小需要在分配时记录下来。
#include <stdio.h>
#include <stdlib.h>
int main() {
int num_elements = 5;
int *arr = (int *)malloc(num_elements * sizeof(int));
if (arr != NULL) {
printf("Array size: %d\n", num_elements);
free(arr);
}
return 0;
}
4、使用宏计算静态数组大小
要计算静态数组的大小,可以定义一个宏,该宏接受数组作为参数,并返回数组的大小。通常,数组的大小可以通过将数组的总字节数除以单个元素的字节数来计算。
#include <stdio.h>
// 定义一个宏来计算数组的大小
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int main() {
int arr[] = {1, 2, 3, 4, 5};
// 使用宏计算数组的大小
int size = ARRAY_SIZE(arr);
printf("数组的大小是: %d\n", size);
return 0;
}