sizeof int数组显示的不是预期的

时间:2012-11-20 00:31:41

标签: c arrays

  

可能重复:
  How to find the sizeof(a pointer pointing to an array)

我有以下程序计算数组中位置之间的最大差异,但sizeof函数不会打印出预期的内容。当通过10个整数大数组并且我用尺寸测量它时它打印出它是8英尺长,怎么样?

#include <stdlib.h>
#include <stdio.h>

int *
measure(int *arr)
{
    int *answer=malloc(sizeof(int)*10);
    answer[0]=0;
    answer[1]=0;
    int size=sizeof(arr)+1;
    printf("%d\n", size);
    int i;
    for(i=0; i<size; i++)
    {
        signed int dif=arr[i]-arr[i+1];
        if(dif<0)
            dif*=-1;
        if(dif>answer[1])
        {
            answer[1]=dif;
            answer[0]=i;
        }
    }  
    return answer;
}

int
main (void)
{
    int arr[10]={77, 3, 89, 198, 47, 62, 308, 709, 109, 932};
    int *ans=measure(arr);
    printf("the biggest dif is %d between nrs %d and %d\n", ans[1], ans[0], ans[0]+1);
    return 0;
}

1 个答案:

答案 0 :(得分:5)

传递给函数时,数组衰减为指针。所以当你在它上面使用sizeof时,它会给你指针的大小,而不是你传递的原始数组的大小。

您可以使用大小传递另一个参数或使用数组的第一个或最后一个元素来存储大小信息。