#define myptr int *有什么问题?

时间:2013-09-19 04:52:42

标签: c++ macros

以下是一小段代码:

#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;
}

p的类型为int*,而q的类型为int。为什么会这样?

4 个答案:

答案 0 :(得分:7)

宏替换后,myptr p,q;变为

int *p,q;

认为q的类型为int*是一个常见的错误,但实际上它是int

您需要的是typedef

typedef int* myptr;

答案 1 :(得分:5)

*绑定到变量,而不是类型。你需要在线上的每个声明重复它。

typedef可以按预期的方式工作:

typedef int * myptr;

答案 2 :(得分:4)

define只是一个简单的替换宏。如果您将myptr替换为int *,就像预处理器一样,您会看到为什么q只是int

int *p,q;

对于您的尝试,您需要使用typedef代替:

typedef int* myptr;

答案 3 :(得分:0)

如果你仍想使用myptr,你可以这样做::

myptr p ;
myptr q ;

但最好使用typedef