@ahw0414

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ポインタ関数?について質問です。

ポインタ関数

文字A ->  文字B;

用途、なにが起こっているのかを知りたいです。
調べてみたところポインタ関数であり、アドレスと関係しているとわかったのですが、それしかわかりませんでした。アドレスの説明や管理が面倒だからでしょうか…?

文字Aとい変数に文字Bにあたるアドレスを記憶させてるのでしょうか?

それとも文字Aの「文字Bのアドレス」を参照をしているだけなのでしょうか?

何を言っているのかわかりづらくてすいません。

文字A文字B、それぞれはアドレスそこに格納されている数値の二つの変数のどちらを使っているのかを教えて欲しいです。

0 likes

3Answer

関数ポインタのことですかね?
であれば、下記のページが参考になるかも知れません。

1Like

理解できていないものを理解しようとして質問しているのですから現時点では質問者は説明するだけの能力がないのはあたりまえのことです。 ですから質問者の言葉で説明しようとしないでください。 理解できないというコードか仕様を省略せずに示してください。

0Like

->演算子は構造体ポインタのメンバへのアクセスに使用します。
文字A、文字Bだと少しわかりにくいので少し変数名とは変更しますが、以下のような構造体があるとして

// 構造体Hogeの定義
typedef struct {
    int fuga;
    char piyo[16];
} Hoge;

まず通常の構造体の宣言とアクセスは.演算子を使用して次のようになるのはわかりますでしょうか?

Hoge hoge; // Hoge型の構造体hogeを宣言

// hogeのメンバに値を代入 (構造体へのアクセスは.演算子)
hoge.fuga = 1;
strcpy(hoge.piyo, "hoge.piyo");

// 出力して確認
printf("hoge1.fuga = %d, hoge1.piyo = %s\n", hoge.fuga, hoge.piyo);

次に構造体のデータをポインタでやり取りしたいと言うことはよくあるのですが、それをポインタの使い方通りに記述すると次のようになります。

Hoge *p_hoge = &hoge; // hogeのアドレスをp_hogeに代入

// ポインタの宛先の構造体にアクセス
(*p_hoge).fuga = 2;
strcpy((*p_hoge).piyo, "(*p_hoge).piyo");

// 元のhogeのデータが書き換わることを確認
printf("hoge.fuga = %d, hoge.piyo = %s\n", hoge.fuga, hoge.piyo);

これで問題なく使用はできるのですが、(*p_hoge)といった書き方は少し書きにくく面倒なのでもっとかんたんで便利な書き方にしたのが->演算子です。
(こういったものを糖衣構文(Syntax Sugar)といいます。)

// 構造体のメンバにポインタ経由でアクセス(->演算子)
p_hoge->fuga = 3;
strcpy(p_hoge->piyo, "p_hoge->piyo");

printf("hoge1.fuga = %d, hoge1.piyo = %s\n", hoge.fuga, hoge.piyo);

文字Aとい変数に文字Bにあたるアドレスを記憶させてるのでしょうか?
それとも文字Aの「文字Bのアドレス」を参照をしているだけなのでしょうか?

この書き方で言う文字Aはポインタなのでアドレスが格納されています。
文字Bは構造体のメンバです。
あえて文章的に書くと「文字Aの宛先にある構造体のメンバ文字B」ということになります。

0Like

Your answer might help someone💌