2014-04-15 86 views
-3

的指針我有一個結構:得到指針的值在結構

struct structname 
{ 
    structname** link; 
    int total; 
} 

我要鏈接到structname1structname2。我所做的是:

int *ptr = &structname2; 
structname1 -> link = &ptr; 

然後我試圖訪問該鏈接爲structname1這是structname2

structname *test = structname1 -> link; 

這是做了正確的方法是什麼?當我試圖打印出來時,會打印一些未知的符號。有人可以幫我弄這個嗎?謝謝。

+3

什麼是structname2? –

+0

你想做一個鏈表嗎? – Brian

+0

你的代碼不應該編譯。 – this

回答

1

您必須按照以下方式進行操作。

struct structname structname1, structname2; //define two structures structname1 and structname2 of type structname. 
struct structname * ptr; // ptr is a pointer to struct of type structname. 
struct structname ** ptr2 // ptr2 is a double pointer to struct of type structname. 
ptr = &structname2; // ptr points to structname2 
ptr2 = &ptr; // ptr2 points to ptr and ptr points to structname2; 
structname1.link = ptr2; // now link is a double pointer to structname2. 

讓我正確的,如果我錯了或丟失

+0

謝謝。我認爲這是我需要的 – terk

+0

如何訪問整數? – terk

+0

如果要訪問structname1中的總數,則必須使用structname1.total。如果你想訪問structname2中的總數,你可以使用(** ptr2) - > total – user207064

0

你的代碼中有幾個錯誤。首先,您得到ptr錯誤的類型:它應該是struct structname **而不是int *

但是,如果您嘗試執行鏈接列表,則根本不需要雙重間接級別。這很可能是你想要什麼:

struct structname 
{ 
    struct structname *link; 
    int total; 
} 

就這樣,連接structname1structname2是如此的簡單(假設structname1structname2struct structname型):

struct structname *ptr = &structname2; 
structname1.link = ptr; 

如果structname1structname2struct structname *類型,那麼你需要這個來代替:

struct structname *ptr = structname2; 
structname1->link = ptr; 

您也可以刪除中間變量ptr,在這裏沒有多大用處。

0
struct node { 
    struct node *next; 
    int cargo; 
} 

struct node *current, *last, *next; 
unsigned char i; 
current = (struct node*)(calloc(sizeof(struct node))); 

for (last = current, unsigned char i = 5; i--;) { 
    next = (struct node*)(calloc(sizeof(struct node))); 
    next->cargo = i; 
    last->next = next; 
} 

上面的代碼是一個非常簡單的鏈接列表。請注意,與您的代碼相比,我改變了一些東西。我使用calloc創建對象,這意味着對象將被分配到堆而不是堆棧。這也不要求您爲鏈接列表中的每個元素a.k.a.節點都有明確的名稱。這也意味着當你將名稱範圍擴大時它不會被破壞。當然,你以後需要釋放所有的節點,當你不再需要這個列表的時候。
然後你不需要指向節點中的指針的指針,一個簡單的指針就足夠了。在你的主程序中,你也應該使用適當的指針。儘管所有的指針都是相同的大小,並且可以互相投射,但應該儘可能使用正確的類型。
這裏我在循環中創建了另外5個節點來演示'靈活的這種方法'。

如果你想做一個循環鏈表,那也很容易。簡單追加這些行:

next->next = current;