【发布时间】:2013-08-29 04:24:25
【问题描述】:
我正在尝试通过将静态结构对象的指针传递给另一个函数并通过其中的指针对其进行修改来修改它。 但即使在执行修改函数后,结构体的值也是完整的。
void some_functon_a(....)
{
static struct some_struct obj;
modifier_function_b(&obj);
// obj is not modified as expected in fact not at all
}
void modifier_function_b(struct some_struct *ptr)
{
// modifying the struct using ptr
}
此外,当我在此代码上运行 gdb 时,我看到代码流一进入 modifier_function_b() 函数 gdb 就会报告变量 ptr 的两个条目:ptr 和 ptr@entry。所有的修改都在 ptr 上完成,而指向 obj 真实位置的 ptr@entry 没有被修改。有人可以指出这里可能发生的事情吗?指向静态变量的指针是 const 指针,我们不能在它们的范围之外修改它们吗?
还有一件事......如果我删除静态限定符,则不会看到这种行为,这让我认为指向静态的指针是一种 const 指针。
提前谢谢:)
【问题讨论】:
-
modifier_function-b 中的代码到底是什么?编译结束后,Const'ness 会丢失,因此不会发生“不,不要让它改变”。
-
我猜你的修改代码是错误的,因为我刚刚写了一些与你的描述相对应的东西,它没有出现这个问题。请参阅下面的答案。
-
另外,你为什么期望指针改变?
-
等等,你不是想直接分配给 ptr 是吗?像 ptr = malloc(...) 什么的。这永远不会起作用,因为 modifier_function_b 中的 ptr 是本地副本(请记住,c 总是按值传递)
标签: pointers static struct pass-by-pointer