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

p有类型int*q有类型int。为什么会这样?

4

4 回答 4

7

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

int *p,q;

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

你需要的是typedef

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

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

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

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

定义只是一个简单的替换宏。如果你用 替换myptrint *就像预处理器会做的那样,你会明白为什么q只是一个int

int *p,q;

对于您正在尝试的内容,您需要使用 atypedef代替:

typedef int* myptr;
于 2013-09-19T04:57:40.597 回答
0

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

myptr p ;
myptr q ;

但它更好用typedef

于 2013-09-19T05:34:08.423 回答