You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取int*类型指针指向数组的长度?

如何计算int*类型指针指向的数组长度

你当前代码得到输出2的原因是:当数组作为函数参数传递时,会退化为指针——哪怕你写的是int nums[],编译器也会把它当作int* nums处理。此时sizeof(nums)获取的是指针本身的大小(在64位系统中通常是8字节),而不是数组的总字节数。用指针大小除以sizeof(nums[0])(也就是int的大小,通常4字节),得到的就是8/4=2,这就是你看到的结果。

C语言中,指针本身不携带它指向的数组的长度信息,所以无法仅通过int*指针直接计算数组长度。你可以通过以下两种方式解决:

1. 额外传递数组长度参数

这是最常用、最可靠的方式,在调用函数时主动传入数组的长度:

int Summation(int* nums, int size) {
    // 这里可以基于size做逻辑处理,比如求和
    return size;
}

// 调用示例:如果first是数组类型(如int first[] = {7,8,9};),先在调用端计算长度
int first[] = {7,8,9};
int firstSum = Summation(first, sizeof(first)/sizeof(first[0]));

2. 使用哨兵值标记数组末尾

在数组的最后放置一个特殊的“哨兵”值(比如-1,前提是数组元素不会用到这个值),遍历数组时遇到哨兵就停止,以此统计长度:

int Summation(int* nums) {
    int size = 0;
    // 假设用-1作为数组结束的标记
    while (nums[size] != -1) {
        size++;
    }
    return size;
}

// 定义数组时必须添加哨兵
int first[] = {7,8,9,-1};
int firstSum = Summation(first);

注意:如果first是动态分配的数组(比如通过malloc申请的),你只能自己在分配时记录长度,再传递给函数,因为malloc返回的指针同样没有长度信息。

内容的提问来源于stack exchange,提问作者Vina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:32:47