2013-04-23 57 views
-2

我使用宏來獲取整數數組元素的個數,並且我可以在主函數中得到整數數組的正確結果,但是我得到了如果我使用getData函數並將整數數組的指針作爲參數發送,則返回錯誤答案。我想知道爲什麼我得到了這個錯誤的答案。謝謝!測量int數組的元組數

我的程序的代碼如下:

#include <stdio.h> 

#define LENGTHOFINTARRAY(intArray) ((int)(sizeof(intArray)/sizeof(int))) 

int main (int argc, char *argv[]) 
{ 
    int a[] = {5,8,9,4,11,7,15,25,1}; 

    int getData(int *data); 
    printf("%d\n", LENGTHOFINTARRAY(a)); 
    getData(a); 

    return 0; 
} 

int getData(int *data) 
{ 
    int i = 0; 
    for(i; i < LENGTHOFINTARRAY(data); i++) 
    { 
     printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]); 
    } 

    return 1; 
} 

和我的程序的結果是:

1,5

我使用gcc作爲我的編譯器。

+4

許多重複的。 – hmjd 2013-04-23 10:28:55

+0

無論如何,答案是在c-faq中 - 在這裏你去:http://c-faq.com/aryptr/aryptr2.html – 2013-04-23 10:36:19

回答

0

int* data的類型只是int*而不是int[9]類似於mainint*的大小是任何其他指針的大小(通常爲4或8個字節)。沒有辦法從指針獲取數組的大小。 而且由於數組無法通過C中的值進行傳遞(除非在結構體或某個內部),您必須傳遞數組的長度。

+0

所以,如果我想在我的getData函數中獲得整數數組的數量,我必須發送整數數組的數量作爲參數?我能以另一種方式得到這個嗎? – Triangle23 2013-04-23 10:34:16

+0

是的,您必須將尺寸作爲參數發送,否則沒有其他辦法。 – Yexo 2013-04-23 10:37:55

+0

不,如果只有一個指向其第一個元素的指針,則無法確定數組的大小。 – 2013-04-23 10:38:39

0

getData()data視爲int*。它不知道它有多久。

您無法確定作爲指向函數的指針傳遞的數組大小。

0

正如已定義

int a[] = {5,8,9,4,11,7,15,25,1}; 

    int getData(int *data); 
    printf("%d\n", LENGTHOFINTARRAY(a)); 
    getData(a); 

所以當調用「的getData(一)」,那麼它意味着要傳遞的第一個元件的地址作爲一個& [0];

所以內部你起作用的getData()作爲

int getData(int *data) 
{ 
    int i = 0; 
    for(i; i < LENGTHOFINTARRAY(data); i++) 
    { 
     printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]); 
    } 

    return 1; 
} 

的數據只是爲整數&它得到的指針或地址的指針的一個[0]; 因此,您的宏現在將數據視爲指向int的指針。這會導致你得到的結果。