簡體   English   中英

從結構體中的指針訪問結構體的值

[英]Access values of structs from a pointer in a struct

我將嘗試使其盡可能簡短。 所以我有兩個結構:

typedef struct someStruct named;
struct someStruct {
    void *key;                  
    void *value;                    
};
typedef struct anotherStruct namedToo;
struct anotherStruct {
    named **table;          
    unsigned int size;          
};

好的,很好,現在請記住上面的所有可能的錯誤,這是不可編輯的代碼。

現在,我有兩種方法:

namedToo *init(float ignoreThis) {
    namedToo *temp;
    temp = malloc(sizeof(namedToo)); //some memory for the second struct
    temp->table = malloc(sizeof(named)*100); //lets say this 100 is for 100 buckets/cells/named elements
    return temp;

方法2:

int insert(namedToo *temp, void* key, void* value) {
     temp->table[0]->key = key; //My problem, I need to access the value and key inside named from the pointer inside namedToo. How can I do this?
}

評論有我的問題:我的問題是,我需要從namedToo內部的指針訪問named內部的值和鍵。 我怎樣才能做到這一點? 我需要不時自行更改和獲取值/密鑰。

named **table;的聲明named **table; table是指向named指針的指針,或者是指向named的指針的數組。 后者似乎是您打算的。

此分配:

temp->table = malloc(sizeof(named)*100); 

為100個named空間分配空間,但是您需要100個named * ,並且每個空間必須指向一個named 給定named的定義,這可能有足夠的空間,但是,此時您有一個未初始化的指針數組。 嘗試訪問它們會導致未定義的行為 ,在這種情況下,這表現為核心轉儲。

您需要為一個指針數組分配空間,然后將每個指針初始化為一個動態分配的named實例。 因此,您應該像這樣分配空間:

int i;
temp->table = malloc(sizeof(named *)*100);
for (i=0; i<100; i++) {
    temp->table[i] = malloc(sizeof(named));
}

然后,您的insert方法應該可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM