C++ 使用#define创建指针

C++ 使用#define创建指针,c++,c-preprocessor,C++,C Preprocessor,是否可以使用#define创建指针? 大概是这样的: #define *HEY #define *HEY 2 ... int *s=HEY; 我会用它来做这样的事情: #define *HEY #define *HEY 2 ... int *s=HEY; 不,在#define宏名称中不允许使用星号 您的示例变量声明无论如何都不起作用,因为它不包含文本*HEY,它只包含与定义的宏名称不匹配的HEY 那个代码打算做什么?制作一个指向数字2的指针?否,\define宏名称中不允许使用星号 您的

是否可以使用
#define
创建指针?
大概是这样的:

#define *HEY
#define *HEY 2
...
int *s=HEY;
我会用它来做这样的事情:

#define *HEY
#define *HEY 2
...
int *s=HEY;

不,在
#define
宏名称中不允许使用星号

您的示例变量声明无论如何都不起作用,因为它不包含文本
*HEY
,它只包含与定义的宏名称不匹配的
HEY


那个代码打算做什么?制作一个指向数字2的指针?

否,
\define
宏名称中不允许使用星号

您的示例变量声明无论如何都不起作用,因为它不包含文本
*HEY
,它只包含与定义的宏名称不匹配的
HEY


那个代码打算做什么?制作一个指向数字2的指针?

定义完全基于文本替换。他们只能在你叫名字的地方插入文字。在你的问题中,你已经犯了两个错误

不能在宏的名称中使用* 如果要调用宏,必须使用定义的名称来调用它 如果是合法的,你也应该用这个名字来称呼它

顺便说一下。宏定义中绝对没有隐藏任何秘密功能

#define HEY 2
在编译之前,只需在源代码中的每一个HEY中用2重新命名即可。没有别的事情发生。 您可以替换所有要替换的对象,如果需要,甚至可以替换单开口大括号

#define OPEN (
...
cout << 2 * OPEN 3 + 4 ) << endl;
#定义打开(
...

cout定义完全基于文本替换。它们只能在你叫名字的地方插入文本。在你的问题中,你已经犯了两个错误

不能在宏的名称中使用* 如果要调用宏,必须使用定义的名称来调用它 如果是合法的,你也应该用这个名字来称呼它

顺便说一句,宏定义中绝对没有隐藏任何秘密功能

#define HEY 2
在编译之前,只需在源代码中的每一个HEY中用一个2进行重新编译,就可以了。 您可以替换所有要替换的对象,如果需要,甚至可以替换单开口大括号

#define OPEN (
...
cout << 2 * OPEN 3 + 4 ) << endl;
#定义打开(
...

“创建指针”是什么意思?你能展示一下你是如何使用它的吗?即使有可能,你为什么要这样做?你应该避免这样混淆代码,因为这样会让人头疼。始终尽可能使代码自文档化。你说的“创建指针”是什么意思?你能展示一下你将如何使用它吗?即使有可能,你为什么要这样做?你应该避免这样混淆代码,因为这样做会导致麻烦。始终尝试使你的代码尽可能自文档化。这只是我在做的事情,我在想使用#define而不是声明变量#define's NE我们可以创建任何变量。如果我们定义AA 2,它们会为我们提供符号常量,比如dat,无论我们在代码中的什么地方编写AA,编译时,它都会被2替换。请记住,AA不是变量,因此执行类似AA=3的操作将导致错误。因此,创建指针作为指针是没有意义的运行时分配的内存位置。当没有可用内存位置时,在运行程序之前解析#define’s的值。这只是我正在做的事情,我想使用#define而不是声明变量#define’s从不创建任何变量。如果我们需要#define,它们会为我们提供符号常量,如date AA 2,在编译时,我们在代码中写入AA的任何地方,它都会被2替换。请记住,AA不是变量,因此执行类似AA=3;的操作将导致错误。因此,创建指针没有意义,因为指针存储运行时分配的内存位置。定义的值在e在没有可用内存位置的情况下运行程序。我知道它的作用,我只是说使用了定义变量而不是创建变量。我知道它的作用,我只是说使用了定义变量而不是创建变量