【问题标题】:Dereference a pointer inside a structure pointer取消引用结构指针内的指针
【发布时间】:2011-02-04 14:57:10
【问题描述】:

我有一个结构:

struct mystruct
{
    int* pointer;
};

structure mystruct* struct_inst;

现在我想更改struct_inst->pointer 指向的值。我该怎么做?

编辑

不是我写的,但是pointer已经指向了一个用malloc分配的内存区域。

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    与任何指针一样。要更改它指向的地址

    struct_inst->pointer = &var;

    改变指向的地址:

    *(struct_inst->pointer) = var;

    【讨论】:

    • 完美,第二个正是我想要的。谢谢。
    • 谢谢。上帝,我喜欢你总是能在这里得到一个直接的答案
    • 我肯定会使用括号来确定,但有必要
    • 看起来不需要,因为结构成员优先en.cppreference.com/w/c/language/operator_precedence
    • @robisrob 不,它们不是必需的。但是在写答案的时候,我不得不停下来思考一下它们是否有必要,所以尽管得出的结论是它们不是,我还是添加了它们...... =)
    【解决方案2】:

    你正在创建一个 mystruct 类型的指针,我想你可能不想要一个指针:

    int x;
    struct mystruct mystruct_inst;
    mystruct_inst.pointer = &x;
    *mystruct_inst.pointer = 33;
    

    如果您需要堆上的 mystruct 指针:

    int x;
    struct mystruct *mystruct_inst = malloc(sizeof(struct mystruct));
    mystruct_inst->pointer = malloc(sizeof(int));
    *(mystruct_inst->pointer) = 33;  
    
    /*Sometime later*/
    
    free(mystruct_inst->pointer);
    free(mystruct_inst);
    

    【讨论】:

    • 我想要一个指针。值更改发生在函数内部。另外,我已经将pointer 分配给了一个malloc-ed 内存区域。
    • 我猜答案的重点是您的代码示例没有显示为struct mystruct 分配任何内存,只是指向此类结构的未初始化指针。但是当然结构内部的pointer 也必须指向某个地方。 =)
    猜你喜欢
    • 2013-01-04
    • 2017-06-17
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2017-02-24
    • 2020-08-19
    相关资源
    最近更新 更多