C语言 确定数组的大小的技巧

C语言中,确定数组的大小有一些常见的技巧。直接使用 sizeof 操作符可以在编译时得到静态数组的大小,但对于动态分配的数组(如通过 malloc 分配的内存)或作为函数参数传递的数组,这种方法则无效。正确管理数组大小有助于避免数组越界等错误。

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; 
} 

推荐阅读
cjavapy编程之路首页