トラップ質問録 1: マクロ定義と typedef の違い

私は頭の良い人間ではなく、知識も深くはありません。いくつかのトピックの罠に陥るのは避けられません。記録する本来の目的は自分自身を戒めることであり、それは要約でもあります知識ポイント. ご参考になれば幸いです. 結局のところ、罠の理由 それは人々をうまく罠にかけるから罠です。これは、記事ごとに 1 つの質問という小さなメモです。

トピックは次のとおりです。

test.c ファイルには、ファイル内で定義されている 4 つの変数のうち、ポインタ型の変数は【複数選択】() という記述が含まれています。

#define lNT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

A:a B: b C:c D:d


まず考えてから、以下の答えを読んでください


答え: ACD

解析:

#define はマクロ定義であり、その機能は単なる置換であり、本格的な型ではありません。

int  *a,b;

マクロは単純に置き換えるだけなので、この形式に置き換えた後。* は最初の a と結合され、*a の変数が int 型で作成されるため、int* 型のポインタが作成されます。これは私たちの通常の理解とは多少異なりますが、本当です。

int e, *f;

 さらに下では、typedef は実際の型のエイリアスであり、このエイリアスは独立した型であり、この型の変数を作成することは、この型を使用してこの型の変数を作成することと同等です。

int* c,d;

ということで、答えはACDです

結論は:

この質問の間違いは、マクロ定義とtypedefの違いの理解が不十分で、マクロをテキストとして置き換えると細部で誤りが生じる可能性があるため、今後注意が必要です。


この分析は私自身の主観的な分析であり、正確であることは保証できません。間違いがあるはずです。読者は変更するために私に連絡してください。ありがたい!

QQ:2624253582

おすすめ

転載: blog.csdn.net/m0_53607711/article/details/128470070