宣言の仕方 – プログラミング – Home

通知
すべてクリア

[解決済] 宣言の仕方


pepusi
 pepusi
(@pepusi)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

すいません基本的な事なんですが教えてください。

LPBYTE A;
LPDWORD B;
LPBITMAPINFO binfo;


BYTE *A;
DWORD *B;
BITMAPINFO *binfo;

は同じ意味ですか?
教えてください。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

やってみりゃわかるべな。

#include <windows.h>
#include <iostream>
#include <typeinfo>

void f() {
LPBYTE A;
LPDWORD B;
LPBITMAPINFO binfo;
std::cout << typeid(A).name() << std::endl;
std::cout << typeid(B).name() << std::endl;
std::cout << typeid(binfo).name() << std::endl;
std::cout << std::endl;
}

void g() {
BYTE *A;
DWORD *B;
BITMAPINFO *binfo;
std::cout << typeid(A).name() << std::endl;
std::cout << typeid(B).name() << std::endl;
std::cout << typeid(binfo).name() << std::endl;
std::cout << std::endl;
}

int main() {
f(); g();
}


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

επιστημηさんのコードでも
確認できますが、

const LPBYTE A;
const LPDWORD B;
const LPBITMAPINFO binfo;


const BYTE *A;
const DWORD *B;
const BITMAPINFO *binfo;

の場合だと、意味が違ってきたりします。


返信引用
rikizo
 rikizo
(@rikizo)
ゲスト
結合: 18年前
投稿: 20
 

LPBYTE A, B, C;

BYTE* A, B, C;

なども意味が違ってきますね。

# 「PBYTE」なんてのもあります。


返信引用
pepusi
 pepusi
(@pepusi)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

回答どうもありがとうございます!

自分が知ってるのは

LPBYTE は BYTEのポインタ
LPDWORD は DWORDのポインタ

という事で、それなので以下が成り立つと考えたんですが。

LPBYTE A; == BYTE *A;
LPDWORD B; == DWORD *B;

LPBITMAPINFO は, BITMAPINFO構造体のポインタですか?
ここがよくわからないんですが、

LPBITMAPINFO binfo; == BITMAPINFO *binfo

が成り立つんでしょうか?

よろしければ教えてください。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

訊くまでもない。
僕が示したコードをちょいちょいといじくれば確認できるやん。


返信引用
pepusi
 pepusi
(@pepusi)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

失礼しました。
ありがとうございます。


返信引用
稍丼
 稍丼
(@稍丼)
ゲスト
結合: 18年前
投稿: 3
 

VS2005などのIDEを使っているのなら,
右クリックして,コンテキストメニューで定義をクリックすれば,
それぞれ typedef されている箇所に飛ぶと思うので,
それで確認できますよね。

あらかじめ LPなんとかという型があるわけでなく,
typedefしてシノニムを作成しているだけです。
なので,無理して覚えなくても,随時覚えていけばいいわけです。

typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;

typedef BYTE far *LPBYTE;

typedef WORD far *LPWORD;

さらに WORD や BYTE 自体も

typedef unsigned char BYTE;
typedef unsigned short WORD;

のようにシノニムになっているだけです。

あと,スルーされてしまっているけど,
const のシノニムへの修飾は,
シノニムがポインタだと意味的には違ってきますね。
http://72.14.235.104/search?
q=cache:_pDiIum8v3IJ:www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03001.html+const+%
E3%82%B7%E3%83%8E%E3%83%8B%E3%83%A0+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%
BF&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja


返信引用
稍丼
 稍丼
(@稍丼)
ゲスト
結合: 18年前
投稿: 3
 

windef.h や wingdi.h を眺めると,
たくさん typedef されたものがあるので,
カラクリって程ではないけど,なるほど... と仕組みがわかると思います。


返信引用
pepusi
 pepusi
(@pepusi)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

>VS2005などのIDEを使っているのなら,
>右クリックして,コンテキストメニューで定義をクリックすれば,
>それぞれ typedef されている箇所に飛ぶと思うので,
>それで確認できますよね。

いろいろ、ありがとうございます!
サイト情報もどうもです!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました