Pointers 将指针传递到静态结构对象

Pointers 将指针传递到静态结构对象,pointers,static,struct,pass-by-pointer,Pointers,Static,Struct,Pass By Pointer,我试图通过将一个静态结构对象的指针传递给另一个函数并通过其中的指针对其进行修改来修改它但即使在执行修改函数后,结构的值也保持不变。 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(

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

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时,我看到只要代码流进入修饰符函数,gdb就会报告变量ptr的两个条目:ptr和ptr@entry. 所有的修改都在ptr上进行,而ptr@entry不修改指向obj实际位置的。有人能指出这里可能发生的事吗?指向静态变量的指针是常量指针吗?我们不能在其范围之外修改它们吗

还有一件事。。。如果我删除静态限定符,就看不到这种行为,这使我认为指向静态的指针是一种常量指针


提前感谢:)

此程序按预期工作。它打印出12,然后是56。另外,您没有指定语言,但这在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();

}
#包括
结构条{
int i;
int j;
};
void b(结构条*foo){
foo->i=5;
foo->j=6;
}
无效aa(){
静态结构杆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();
}

修饰符函数-b中的确切代码是什么?编译结束后,Const'ness将丢失,因此不会出现“不,不要让它更改”的情况。我猜您的修改代码是错误的,因为我刚刚编写了一些与您的描述相对应的内容,它不会出现此问题。请看下面我的答案。还有,为什么您希望指针发生变化?等等,您不是要直接分配给ptr,是吗?比如ptr=malloc(…)之类的。由于修饰符_函数_b中的ptr是一个本地副本(请记住,c总是按值传递),所以这永远不会起作用,感谢您的快速回复。这当然不是实际的代码。。。这正是我认为与这个问题相关的部分。现在,如果我运行代码而不使用gdb调试,我会看到代码在使用printk语句时的行为与预期的一样,但当我尝试使用gdb进行单步调试时,它的行为与原始问题中提到的一样。这是否意味着我不应该总是信任调试器?是的。。。在这种情况下会有任何影响吗?