0
可能重複:
How to find the sizeof(a pointer pointing to an array)的sizeof int數組表示沒有什麼預期
我有以下程序計算在陣列位置之間的最大差異,但sizeof運算功能無法打印出乎預料的。當傳遞10個大數組時,我用sizeof測量它打印出來的長度是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;
}
假設您爲'size'獲得4或8,這是預期的行爲。數組中的許多指針衰減到很多*指針,並且指針不再知道數組的大小。 – dmckee
@dmckee現在看到... – patriques