【问题标题】:Setting two pointers equal in a helper function在辅助函数中设置两个指针相等
【发布时间】:2015-09-28 12:56:51
【问题描述】:

我创建了一个名为“磁盘”的结构。我还为磁盘创建了一个构造函数,它返回指向磁盘结构的指针。

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

虽然我可以从“create_or_update_disk_from_file”中访问磁盘的结构变量,但我无法从调用它的函数 process_current_directory 访问磁盘结构变量。

让 disk_ptr 指向与construct_disk 的输出相同的地址的正确方法是什么?

【问题讨论】:

    标签: c pointers parameter-passing


    【解决方案1】:

    将 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);
    

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 2017-05-29
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多