2015-01-07 341 views
0

我無法找到任何解決我的問題,我的大腦幾乎是爆炸......結構指針到結構陣列

我已經定義了一個結構,並創建聯繫人,就像一個ADRESS書的功能。 我在問有多少聯繫人想創建,這完全正常工作。

所以我最終得到了一個指向我的指針的聯繫數組。 在我的菜單中,我可以選擇創建聯繫人,搜索和刪除聯繫人。

目前我正在尋找聯繫人。 因此,我開始搜索功能,並把它指向我的結構。

我不知道如何將這個指針解除引用到一個結構數組中。 這可能只是一個愚蠢的小小錯誤,但我找不到它。

所以我第一次試圖找出我創建了多少聯繫人。 當我嘗試打印創建的聯繫人的這樣的數字:

void searchContact(struct Contact* ContactArray){ 
     int howManyContacts=sizeof(ContactArray)/sizeof(struct Contact); 
     printf("%d",howManyContacts); 
    } 

我總是得到0打印出來。 如果我創建1,2,3 ....聯繫

我希望你們有人能幫助我沒關係......它的駕駛我瘋狂

順便說一句,我使用Eclipse使用GCC編譯器

+0

'ContactArray'是一個指針,所以它的規模將始終是相同的。 – juanchopanza

+0

'sizeof'技巧只能與正確的數組一起使用(即聲明爲'struct Contact contacts [X];'),而不是指針,因爲指針的sizeof'給你指針的大小,而不是它指向。每個需要知道數組大小的函數都需要有一個參數來指示數組中的條目數量。 –

+0

你可以在你的結構中有一個「count」字段並將其用於此目的 – Gopi

回答

1

傳遞給函數的數組被視爲指針,因此sizeof(contactArray)將始終爲指向struct Contact的指針的大小 - 一個常數值。 See here for more info

您應該將一個參數添加到名爲size的函數中,該函數將表示數組的大小。在方法內部不可能計算它。

您也可以在另一個結構中包裝一個聯繫數組,例如struct Contacts,幷包含指定聯繫數量的字段。

0

您的數組大小是動態的。 sizeof(ContactArray)將返回與sizeof(void*)相同的結果,因爲您處理的是指針而不是固定大小的數組。 C沒有提供確定數組大小的方法。您需要將數組的大小存儲在某處並傳遞給它。

+0

這是C,而不是C++。 –

+0

@丹尼爾:哎喲,我的壞。我編輯了答案並刪除了C++特定部分。 – Daerst

0

在代碼

int howManyContacts=sizeof(ContactArray)/sizeof(struct Contact); 

ContactArray是類型的指針到一些型 [struct Contact,具體]。它將佔據指針的大小。

OTOH,struct Contact是一種結構。 sizeof將給出單個元素+填充的總大小(如果有的話)。

在你的情況,sizeof(ContactArray) [由指針變量取大小]是<sizeof(struct Contact)sizeof回報size_t [unsigned int],由於你的代碼執行整數除法,你得到的結果是0,正確。

0

好吧那我怎麼才能取消引用指針方式,我可以使用這種方式:

printf("%s \n",ContactArray[x].Name); 
printf("%s \n",ContactArray[x].Surname); 
+0

您應該在原始問題中包含編輯。此外,這段代碼對我來說看起來不錯...它不工作嗎? – Daerst