C++ #定义myptr int*有什么问题?

C++ #定义myptr int*有什么问题?,c++,macros,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<<e

下面是一小段代码:

#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;
}
#包括
使用名称空间std;
#定义myptr int*
int main(){
myptr p,q;
INTC;
p=&c;
q=&c;
c=2;

cout该
*
绑定到变量,而不是类型。您需要为行中的每个声明重复它

typedef将按照您期望的方式工作:

typedef int * myptr;

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

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

您需要的是
typedef

typedef int* myptr;

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

int *p,q;
对于您正在尝试的内容,您需要使用
typedef

typedef int* myptr;

如果仍然希望使用myptr,可以这样做:

myptr p ;
myptr q ;
但最好使用
typedef

#define“几乎”像编辑器中的“查找和替换”,但不能互换。