2013-10-18 33 views
1

我需要實現一組函數來提供各種設置操作,如創建集合,添加元素設置等。我是編程新手,但是,我知道如何編寫函數,但我的問題與這個任務是我需要使用指針,我不知道如何編寫一個函數來創建一個指針集。我不是在尋求解決方案,只是讓我開始的一個很好的解釋!謝謝使用指針設置操作

+0

你有沒有嘗試過這樣的:http://bit.ly/H5jb6Q – Sadique

+0

我做我明白三分球,但我不知道如何如果你看過我的問題使用它們套正確你會理解 – user90790

回答

1

集可以存儲在各種數據結構中,例如但不限於鏈接列表。然後,您需要抽離集合操作來添加,刪除和測試元素的成員資格。我建議您在開展這個小型項目之前閱讀數據結構相關文獻並做一些相關練習。

+0

謝謝。如果我使用鏈表我仍然需要用戶指針? – user90790

+0

是的。有關我找到的其中一個教程,請參閱http://www.gatesit.org/gitdownloads/C&DS.pdf。請注意,鏈接列表不過是包含數據的一種手段。您也可以使用固定陣列,當數組空間耗盡時,需要根據需要「調整大小」。這可能是編寫鏈接列表代碼的替代方法。 – Tarik

+0

有關動態數組引用的信息,請參見http://en.m.wikipedia.org/wiki/Dynamic_array。 – Tarik

1

首先你需要一些結構來保存你的指針,它可以像數組一樣簡單(或者Tarik建議的鏈表)。

一旦你有一個結構,你創建設置的功能。

E.g.

void createSet(int*** set, int maxsize) 
{ 
    *set = malloc(sizeof(int*) * maxsize); 
} 

void addPtrToSet(int** set, void* ptr, int* numberOfPointers) 
{ 
    // check if pointer is already in array 
    int i; 
    for (i = 0; i < *numberOfPointers; ++i) 
    { 
    if (ptr == set[i]) return; // already in set 
    } 
    set[(*numberOfPointers)++] = ptr; 
} 

... 

const int maxsize = 10; 
int** set = 0; 
int a; 
char* b; 
int numberOfPointers = 0; 
createSet(&set, maxsize); 
addPtrToSet(set, &a, &numberOfPointers); 
addPtrToSet(set, &b, &numberOfPointers); 
addPtrToSet(set, &a, &numberOfPointers); // will not be added to set 

這裏假設sizeof(int*) == sizeof(char*)

+0

+1爲您的示例代碼。這將很好地闡述int ***的內容,或者可以通過return語句而不是輸出參數返回集合。 – Tarik

+0

是爲了讓它有點含糊,我認爲過於細緻無助,只是舉一個例子,指出正確的方向,當然在錯誤處理,性能等方面可以做很多事情。 –

+0

這只是我發現int ***令人困惑的人誰已經不喜歡指針。 – Tarik