Передача указателя на статический объект структуры
Я пытаюсь изменить статический объект структуры, передавая его указатель на другую функцию и изменяя его указателем внутри этого. Но даже после выполнения модифицирующей функции значения структуры остаются неизменными.
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, в то время как ptr @ entry, которая указывает на реальное местоположение obj, не изменяется. Может кто-нибудь указать, что здесь может происходить? Являются ли указатели на статические переменные видом константных указателей, и мы не можем изменять их вне их области видимости?
Еще одна вещь... это поведение не видно, если я удаляю статический классификатор, что привело меня к мысли, что указатель на статический является своего рода константным указателем.
Заранее спасибо:)
1 ответ
Эта программа работает как положено. Он печатает 1 2, затем 5 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();
}