質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2578閲覧

アロー演算子を2つ使用している、ポインタが指す構造体のメンバへのアクセス

box-man

総合スコア5

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/02/11 08:34

前提と問題

現在シューティングゲームを制作したく勉強しているのですが、下記のタスクの処理関数内にある
0. work->X+=work->VX;
の挙動が理解できなく質問させていただきました。
一応 work->X+=work までならば、構造体のポインタworkから X+=work をしたメンバ X にアクセスすることができる状態にするものだと
理解できるのですが、1.式のメンバVXは何からアクセスされるようになるのでしょうか。

まとまってない文章ですが回答をよろしくお願いいたします。

該当のソースコード

タスクの一部分を抜粋

C++

1// 自機ワークエリア構造体 2struct MACHINE_WORK { 3 float X, Y, VX, VY; 4 //中略 5}; 6// 自機の処理関数 7void Funcmachine(TASK* task) { 8 assert(sizeof(MACHINE_WORK)<=WORK_SIZE); 9 MACHINE_WORK* work=(MACHINE_WORK*)task->Work; 10 work->X+=work->VX; 11 //中略 12}

補足

上記のソースコードは、
汎用ワークエリアへのポインタを、自機ワークエリア構造体へのポインタにキャストした後
自機ワークエリア構造体のメンバ名を使って自機に関する処理をしているソースコードです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

演算子の優先順位というのを学ぶとよいでしょう。「掛け算は足し算より先にする」とかです。
->は優先度が高く、+=は優先度が低いです。

投稿2020/02/11 10:37

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

struct MACHINE_WORK { float X, Y, VX, VY; //中略 }; int main() { MACHINE_WORK data; data.X += data.VX; // コレ↑ならわかります? // ポインタ使って同じことすると // コレ↓になります。 MACHINE_WORK* work = &data; work->X += work->VX; }

投稿2020/02/11 08:44

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

box-man

2020/02/11 08:56

data.X += data.VX;であれば理解できます。 早急な回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問