2015-07-09 4 views
3

Я создал структуру под названием «Диск». Я также создал конструктор для диска, который возвращает указатель на структуру диска.Установка двух указателей, равных в вспомогательной функции

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"); 
    ... 
} 

Два заявления печати дают мне следующие значения для указателей:

Указатель диска: 0x6000509f0 Указатель на диск: 0xb

И хотя я могу получить доступ к структурным переменным диска из withi n "create_or_update_disk_from_file" - я не могу получить доступ к переменным структуры диска из вызывающей его функции process_current_directory.

Что было бы правильным способом, чтобы disk_ptr указывал на тот же адрес, что и вывод конструктора?

ответ

4

Передайте disk_ptr как структурный диск **, чтобы его можно было изменить.

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"); 
    ... 
} 

и назвать его как this-

create_or_update_disk_from_file(current_directory, &disk_ptr, CREATE); 
Смежные вопросы