以下是一小段代码:
#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
。为什么会这样?
答案 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