2010-12-02 8 views
0

#defineを使用してポインタを作成できますか?このような
何か:#defineを使用してポインタを作成する

#define *HEY 

私はこのような何かのためにそれを使用します:

#define *HEY 2 
... 
int *s=HEY; 
+0

かなり無用であったとしても、動作するはず?あなたはこれをどのように使用するのかを示すことができますか? – tenfour

+0

あなたはなぜそれが可能であったとしてもそれをしたいですか? – ronag

+4

このようなコードを難読化することは避けてください。頭痛の原因になります。できるだけ自己文書化するようにコードを作成してください。 – LeopardSkinPillBoxHat

答えて

2

いいえ、アスタリスクが#defineマクロ名では許可されていません。

*HEYというテキストが含まれていないため、定義されたマクロ名と一致しないHEYしか含まれていないため、変数の宣言の例は、とにかく動作しません。

目的とするコードはなんですか?番号2を指すポインタを作成しますか?

+0

ためのおかげで、私はの#defineを使用しての代わりに、変数 – Ramilol

+2

の#defineのはどの変数を作成しない宣言を考えていました。それらは私たちが#define AA 2を行うならば、私たちに記号定数を与えます。コンパイル中にAAを書くコードのどこにあっても、それは2に置き換えられます.AAは変数ではなく何かをしていることを覚えておいてくださいAA = 3のように;エラーが発生します。 –

+0

したがって、ポインタを作成することは、実行時に割り当てられたメモリの場所を格納するポインタとして意味をなさない。 #defineの値は、使用可能なメモリ位置がないときにプログラムを実行する前に解析されます。 –

1

は完全にテキスト置換に基づいています。彼らはあなたが名前を呼ぶ場所のどこにでもテキストを挿入することができます。あなたの質問では、すでに2つのミスをしています。

あなたが法的*されているだろう場合は、それを を定義し、同じ名前でそれを呼び出す必要がありますマクロを呼び出したい場合は、マクロ の名前で*を使用することはできません、あなたもでそれを求めているsould正確にその名前* HEY

ところで、マクロ定義のどこかに秘密の機能が隠されていることは絶対にありません。

#define HEY 2 

は、ソースコード内のすべてのHEYをコンパイルする前に2回再生するだけです。他に何も起こらない。 交換したいものはすべて交換することができます。

#define OPEN (
... 
cout << 2 * OPEN 3 + 4) << endl; 

は、あなたが「ポインタを作成する」とはどういう意味ですか

+0

私はそれが何をしているか知っています、ただ変数を作成する代わりに言っているだけですが、 '#define' – Ramilol

関連する問題