2015-07-09 59 views
3

我創建了一個名爲「Disk」的結構。我還爲磁盤創建了一個構造函數,它返回一個指向磁盤結構的指針。在輔助函數中設置兩個相等的指針

struct disk {...} 
struct disk* construct_disk(char*, char*, char*, char*, int, char*, int*); 

我有在其內我聲明,disk_ptr將指向盤的地址(但不分配任何內存)另一功能。我想將disk_ptr傳遞給一個輔助函數,它將調用磁盤構造函數,並將disk_ptr設置爲指向與磁盤構造函數返回的指針相同的地址。

int process_current_directory(health_monitor* hm, char* directory){ 
    ... 
    struct disk* disk_ptr; 
    //PROBLEM IS HERE - disk_ptr is not assigned value correctly below 
    create_or_update_disk_from_file(current_directory, disk_ptr, CREATE); 
    printf("The disk pointer is: %p\n", disk_ptr"); 
    ... 
} 

所以,create_or_update_disk_from_file藉此指針目前指向無處,並做到這一點:

void create_or_update_disk_from_file(char* filename, struct disk* disk_ptr, int action){ 
    ... 
    // This is where I want to disk_ptr to be assigned 
    disk_ptr = construct_disk(name, serial, vendor, model, rpm, raid_type, input); 
    printf("The disk pointer is: %p\n", disk_ptr"); 
    ... 
} 

兩個print語句給我下面的值指針:

盤指針是: 0x6000509f0 磁盤指針是:0xb

雖然我可以從withi訪問磁盤的結構變量n「create_or_update_disk_from_file」 - 我無法從調用它的函數process_current_directory訪問磁盤結構變量。

將disk_ptr指向與construct_disk的輸出相同的地址的正確方法是什麼?

回答

4

將disk_ptr作爲struct disk **傳遞,以便您可以對其進行修改。

void create_or_update_disk_from_file(char* filename, struct disk** disk_ptr, int action){ 
    ... 
    *disk_ptr = construct_disk(name, serial, vendor, model, rpm, raid_type, input); 
    printf("The disk pointer is: %p\n", *disk_ptr"); 
    ... 
} 

,並調用它像這個 -

create_or_update_disk_from_file(current_directory, &disk_ptr, CREATE);