2014-05-02 49 views
0

我正在嘗試將指向結構體的指針傳遞給函數,然後返回所述指針的編輯後的版本。 這些都是結構的聲明:無法成功傳遞/返回結構體指針

struct HshTble; 
typedef struct HshTble *HashTable; 
enum EntryStatus { Occupied, Empty, Deleted }; 
struct HashEntry { 
    int Element; 
    enum EntryStatus Info; 
}; 
typedef struct HashEntry Entry; 

struct HshTble{ 
    int TableSize; 
    Entry *Array; 
}; 

因此,大家可以看到有一個指向其他結構內的結構。 我的問題是當涉及到嘗試用這些東西做什麼......我會把我的代碼放到那裏,希望能夠清楚應該發生什麼,但我也會添加註釋。

void main(){ 
    HashTable *table; 
    int size; 

    table = (HashTable*) malloc (sizeof(HashTable)); 

    table = createTable(table, &size); 

在接下來的位,其中的問題有所上漲,這個想法是我想編輯內部表中的值:

HashTable createTable(HashTable table, int *size){ 
    int x, y, ch; 
    *size = 0; 
    fopen_s(&fp, DATA_FILENAME, "r"); 

    while (EOF != fscanf_s(fp, DATA_FILENAME, &ch)) 
    { 
     y = x = f(ch); 
     ++*size; 

     if (table->Array[x].Info != Occupied) 
     { 
      table->Array[x].Element = ch; 
      table->Array[x].Info = Occupied; 
     } 
     else if (table->Array[x].Info == Occupied) 
     { 
      while (table->Array[y].Info == Occupied) 
      { 
       if (y > HASH_TABLE_SIZE) 
       { 
        y = 0; 
        table->Array[y].Element = ch; 
        table->Array[y].Info = Occupied; 
       } 
       else 
       { 
        table->Array[y + 1].Element = ch; 
        table->Array[y + 1].Info = Occupied; 
       } 
       y++; 
      } 
     } 
     return table; 
    } 
} 

它似乎不喜歡我的功能有型我的結構之一,但我覺得這是我目前的主要問題。任何幫助都會很棒。

+1

'main'應該返回'int'和** **不是'已經void' –

+3

您的typedef'HashTable'爲指針,那麼什麼是'表=(哈希表* )malloc(sizeof(HashTable));'所有關於?它應該是'HashTable表; table = malloc(sizeof * table);'更好的是,不要首先用'typedef'隱藏指針,並且避免所有這些問題。 –

+0

只要擺脫typedef。往往是這樣,它掩蓋了正在發生的事情,導致更多的混淆,而不是澄清事情。 –

回答

-2

嘗試

void createTable(HashTable &table, int *size){ 

只需修改作爲參數傳遞的對象。那麼你不需要回報。

對於C做

void createTable(HashTable *table, int *size){ 
+1

C. –

+0

有沒有參考類型請原諒,我的道歉。 – user3344003