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 の 2 つのエントリ (ptr と ptr@entry) を報告することがわかります。すべての変更は ptr で行われますが、obj の実際の場所を指す ptr@entry は変更されません。誰かがここで何が起こっているのか指摘できますか? 静的変数へのポインターは const ポインターのようなもので、スコープ外で変更することはできませんか?

もう1つ...静的修飾子を削除すると、この動作は見られないため、静的へのポインターはconstポインターのようなものだと思いました。

前もって感謝します :)

4

1 に答える 1

0

このプログラムは期待どおりに動作します。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();

}
于 2013-08-29T07:05:32.503 に答える