2012-11-20 22 views
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; 
} 
+0

假設您爲'size'獲得4或8,這是預期的行爲。數組中的許多指針衰減到很多*指針,並且指針不再知道數組的大小。 – dmckee

+0

@dmckee現在看到... – patriques

回答

5

當傳遞給一個函數時,數組會衰變爲一個指針。所以當你使用sizeof時,它會給你指針的大小,而不是你傳遞的原始數組的大小。

您可以傳遞另一個參數的大小或使用數組的第一個或最後一個元素來存儲大小信息。

相關問題