0

我试图通过将其指针传递给另一个函数并通过其中的指针修改它来修改静态结构对象。但即使在执行修改函数之后,结构的值也是完整的。

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 指针。

提前致谢 :)

4

1 回答 1

0

This program works as expected. It prints out 1 2 then 5 6. Also, you didn't specify language, but this does the expected in both C and 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();

}
于 2013-08-29T07:05:32.503 回答