2

コードの小さなスニペットを次に示します。

#include <iostream>
using namespace std;

#define myptr int *

int main(){
    myptr p,q;
    int c;
    p = &c;
    q = &c;
    c = 2;
    cout<<c<<endl;
    cout<<*p<<endl;
    cout<<*q<<endl;

    return 0;
}

phas typeint*ながらqhas type int. なぜこうなった ?

4

4 に答える 4

7

マクロ置換後myptr p,q;

int *p,q;

の型が であると考えるのはよくある間違いですqint*、実際にはintです。

必要なものは次のtypedefとおりです。

typedef int* myptr;
于 2013-09-19T04:56:15.013 に答える
5

型ではなく、変数に*バインドします。行の宣言ごとに繰り返す必要があります。

typedef は期待どおりに機能します。

typedef int * myptr;
于 2013-09-19T04:54:44.737 に答える
4

define は単純な置換マクロです。に置き換えるmyptrint *、プリプロセッサが行うのと同じように、qが単にint:

int *p,q;

あなたが試みていることについては、typedef代わりに a を使用する必要があります:

typedef int* myptr;
于 2013-09-19T04:57:40.597 に答える