在结构体指针中取消引用指针

37

我有一个结构体:

struct mystruct
{
    int* pointer;
};

structure mystruct* struct_inst;

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

编辑

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

2个回答

62
与任何指针一样,要更改它所指向的地址

struct_inst->pointer = &var;

要更改它所指向的地址上的

*(struct_inst->pointer) = var;


3
好的,第二个就是我想要的。谢谢。 - Federico klez Culloca
5
谢谢。天哪,我喜欢这里总是能得到直截了当的答案。 - user12345613
我肯定会使用括号以确保,但这是必要的吗? - robisrob
1
似乎不需要,因为结构成员具有优先权。http://en.cppreference.com/w/c/language/operator_precedence - robisrob
2
@robisrob 不,它们不是必要的。但是在写答案时,我不得不暂停一会儿去思考它们是否必要,所以尽管得出结论它们不是必要的,我还是加上了它们...=) - Arkku

4
您正在创建一个类型为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);

我需要一个指针。值的更改发生在函数内部。此外,我已经将“指针”分配给了一个malloc-ed内存区域。 - Federico klez Culloca
2
我猜答案的重点是你的代码示例没有为 struct mystruct 分配任何内存,只是一个未初始化的指向这样一个结构体的指针。但当然,结构体中的 pointer 也必须指向某个地方。=) - Arkku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接