我试图通过将其指针传递给另一个函数并通过其中的指针修改它来修改静态结构对象。 但即使执行修改功能后,结构的值也完好无损。
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不会被修改。有人可以指出这里可能发生的事情吗?指向静态变量的指针是一种常量指针,我们不能在它们的范围之外修改它们吗?
还有一件事......如果我删除静态限定符,就不会出现这种行为,这导致我认为指向静态的指针是一种常量指针。
提前致谢:)
答案 0 :(得分:0)
此程序按预期工作。它打印出1 2然后5 6 6.此外,你没有指定语言,但这在C和C ++中都是预期的
#include <stdio.h>
struct bar {
int i;
int j;
};
void b(struct bar * foo) {
foo->i = 5;
foo->j = 6;
}
void aa(){
static struct bar a;
a.i = 1;
a.j=2;
printf("%d %d\n", a.i, a.j);
b(&a);
printf("%d %d\n", a.i, a.j);
}
int main(){
aa();
}