C语言数组长度如何正确计算?

99ANYc3cd6
预计阅读时长 7 分钟
位置: 首页 C语言 正文

在C语言中,没有内置函数可以直接获取数组的长度,因为数组在传递给函数时会退化为指针,丢失其原始大小信息,以下是几种计算数组长度的方法,适用于不同场景:

c语言怎么计算数组长度
(图片来源网络,侵删)

方法1:使用 sizeof 运算符(适用于静态数组)

编译时已知数组大小的情况下,可以通过 sizeof 计算数组长度:

int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]); // 5

注意

  • 仅适用于静态数组(栈上分配的数组)。
  • 不适用于函数参数(数组退化为指针,sizeof 返回指针大小,而非数组大小)。

方法2:手动传递数组长度(推荐)

在函数中处理数组时,显式传递数组长度是最安全的方式:

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d ", arr[i]);
    }
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = sizeof(arr) / sizeof(arr[0]);
    printArray(arr, length); // 显式传递长度
    return 0;
}

方法3:使用终止符(适用于字符串或特定结构)

对于以特定值(如 '\0' 的字符串)结尾的数组,可以通过遍历找到终止符:

c语言怎么计算数组长度
(图片来源网络,侵删)
char str[] = "Hello";
int length = 0;
while (str[length] != '\0') {
    length++;
}
// length = 5(不包含 '\0')

方法4:宏定义(适用于固定大小的数组)

如果数组大小固定,可以用宏定义避免重复计算:

#define LENGTH(arr) (sizeof(arr) / sizeof(arr[0]))
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    printf("%d", LENGTH(arr)); // 输出 5
    return 0;
}

方法5:动态数组(需额外记录长度)

对于动态分配的数组(如 malloc),必须手动维护长度

int *arr = malloc(5 * sizeof(int));
int length = 5; // 必须单独记录
// 使用后...
free(arr);

注意事项

  1. 避免常见错误

    void func(int arr[]) {
        int size = sizeof(arr) / sizeof(arr[0]); // 错误!arr 是指针
    }

    正确做法:显式传递长度。

    c语言怎么计算数组长度
    (图片来源网络,侵删)
  2. 多维数组

    int matrix[3][4];
    int rows = sizeof(matrix) / sizeof(matrix[0]); // 3
    int cols = sizeof(matrix[0]) / sizeof(matrix[0][0]); // 4

场景 方法 示例
静态数组(编译时已知) sizeof sizeof(arr)/sizeof(arr[0])
函数参数 显式传递长度 void func(int arr[], int len)
字符串 遍历终止符 while(str[i] != '\0')
动态数组 手动维护长度 int length = 5;

最佳实践:在函数中处理数组时,始终显式传递长度,避免依赖 sizeof 的陷阱。

-- 展开阅读全文 --
头像
dede外贸网站优化如何提升海外流量与转化?
« 上一篇 前天
织梦如何快速仿制手机网站?
下一篇 » 前天
取消
微信二维码
支付宝二维码

目录[+]