Передача указателя на статический объект структуры

Я пытаюсь изменить статический объект структуры, передавая его указатель на другую функцию и изменяя его указателем внутри этого. Но даже после выполнения модифицирующей функции значения структуры остаются неизменными.

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();

}
Другие вопросы по тегам