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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

ポインタ

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

Q&A

解決済

2回答

1958閲覧

構造体について C++ VS2010 Wandbox

maintheme86

総合スコア7

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

ポインタ

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

0グッド

0クリップ

投稿2017/03/21 10:06

###構造体について
他人の書いたアプリケーションプログラムの解読を行っていて、
ポインタと参照の勉強をしている過程内で、機能(?)質問があります。

###他人の書いたプログラム
Visual Studio2010
MFCアプリケーション

###プログラム勉強場所
Wandbox

###定義した構造体

#include <iostream> //ポインタと参照の練習 typedef struct { int a; int b; }TEST, *PTEST; int main() { TEST data; TEST& ref_data = data; // dataへの参照 TEST* ptr_data = &data; // dataへのポインタ TEST dammy; TEST& ref_dammy = dammy; // dataへの参照 TEST* ptr_dammy = &dammy; // dataへのポインタ // 実験1 data.a = 1; data.b = 2; std::cout << "---それぞれの書き方と値をチェックします(実験1)---\n"; std::cout << "data.a = " << data.a << "\n"; std::cout << "ref_data.a = " << ref_data.a << "\n"; std::cout << "ptr_data->a = " << ptr_data->a << "\n\n"; std::cout << "data.b = " << data.b << "\n"; std::cout << "ref_data.b = " << ref_data.b << "\n"; std::cout << "ptr_data->b = " << ptr_data->b << "\n\n"; // 実験2 dammy.a = 10; dammy.b = 20; std::cout << "---それぞれの書き方と値をチェックします(実験2)---\n"; std::cout << "dammy.a =" << dammy.a << "\n"; std::cout << "ref_dammy.a = " << ref_dammy.a << "\n"; std::cout << "ptr_dammy->a = " << ptr_dammy->a << "\n\n"; std::cout << "dammy.b =" << dammy.b << "\n"; std::cout << "ref_dammy.b = " << ref_dammy.b << "\n"; std::cout << "ptr_dammy->b = " << ptr_dammy->b << "\n\n"; // 実験3 data.a = data.a + dammy.a; dammy.b = dammy.b + data.b; std::cout << "---それぞれの書き方と値をチェックします(実験3)---\n"; std::cout << "data.a = " << data.a << "\n"; std::cout << "ref_data.a = " << ref_data.a << "\n"; std::cout << "ptr_data->a = " << ptr_data->a << "\n\n"; std::cout << "data.b = " << data.b << "\n"; std::cout << "ref_data.b = " << ref_data.b << "\n"; std::cout << "ptr_data->b = " << ptr_data->b << "\n\n"; std::cout << "dammy.a =" << dammy.a << "\n"; std::cout << "ref_dammy.a = " << ref_dammy.a << "\n"; std::cout << "ptr_dammy->a = " << ptr_dammy->a << "\n\n"; std::cout << "dammy.b =" << dammy.b << "\n"; std::cout << "ref_dammy.b = " << ref_dammy.b << "\n"; std::cout << "ptr_dammy->b = " << ptr_dammy->b << "\n\n"; return 0; }

###質問
1.他人のアプリケーションプログラムの解読をしていて、
名称こそ違えど、
typedef struct
{
}TEST, *PTEST;

という書き方が多くありました。
TESTの使用方法までは理解したのですが、*PTEST
の使い方が分かりません。
*PTESTは Visual Studio2010 にてどのように使われるものなのでしょうか?
また書き分けている意図はあるのでしょうか?

2.Wandboxで
*PTEST
はどのように使う(書き方?)のでしょうか?
(構造体に書くことは出来ましたが、その後が何とも出来ません・・・・)

3.場違いな質問かもしれませんが、
PTESTを使って、格納されている値数の参照は可能でしょうか?

###Wandbox URL
http://melpon.org/wandbox/permlink/UIxLhi7E6iaX0DdW

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

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

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

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

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

guest

回答2

0

tacsheavenさんが書かれているように、PTESTは構造体TESTのポインタの型なので、

2.Wandboxで

*PTEST
はどのように使う(書き方?)のでしょうか?
(構造体に書くことは出来ましたが、その後が何とも出来ません・・・・)

例に上がっているコードをPTESTを使って書きなおすと

c++

1int main() 2{ 3 TEST data; 4 TEST& ref_data = data; // dataへの参照 5 PTEST ptr_data = &data; // dataへのポインタ 6 TEST dammy; 7 TEST& ref_dammy = dammy; // dataへの参照 8 PTEST ptr_dammy = &dammy; // dataへのポインタ 9: 10: 11

となるだけです。

投稿2017/03/21 13:58

KoichiSugiyama

総合スコア3041

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

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

maintheme86

2017/03/22 01:30

KoichiSugiyamaさん  回答ありがとうございます。 Wandbox上でも書けるようになりました!!
guest

0

ベストアンサー

これはこの構造体(TEST)へのポインタとしての型を、PTEST として宣言しているのです。
分けて書けば

typedef struct { ... } TEST; typedef TEST *PTEST;

となります。

なぜわざわざポインタの型を定義するかといえば、少なくとも C においては構造体へのポインタを使う機会が多いからです。(動的なメモリ確保を安全に行おうとすれば、構造体へのポインタが出てくる)
むろん、変数宣言時に TEST *ptrA, *ptrB, ... と書いてもよいのですが、タイプミスをして * を忘れてしまうと、コンパイルは通るかもしれませんが意図した動きはしません。
そのようなミスを防ぐために、PTEST ptrA, ptrB, ptrC ... のように書けるようにしよう、というわけです。

投稿2017/03/21 10:14

編集2017/03/21 10:18
tacsheaven

総合スコア13703

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

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

maintheme86

2017/03/22 01:30

tacsheavenさん 回答ありがとうございます。 変数宣言時でも、構造体でのポインタの型宣言でも どちらでも構わないということですね。 (ミス防止で後者のような書き方が多いと)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問