我只是想知道是否可以有一个引用 #define 常量的指针。如果是的话我该怎么做?
#define
指令是针对预处理器的指令,这意味着它在编译任何内容之前由预处理器调用。
因此,如果您输入:
#define NUMBER 100
然后输入:
int x = NUMBER;
你的编译器实际上看到的很简单:
int x = 100;
基本上就像您在文字处理程序中打开源代码并进行查找/替换以将每个出现的“NUMBER”替换为“100”。所以你的编译器不知道
NUMBER
的存在。只有预编译预处理器知道 NUMBER
的含义。
因此,如果您尝试获取
NUMBER
的地址,编译器会认为您正在尝试获取整数常量的地址,这是无效的。
不,因为
#define
用于文本替换,所以它不是一个可以获取指针的变量。在代码传递给编译器之前,您会看到它实际上被 #define
的定义替换,因此没有任何内容可以获取地址。如果您需要常量的地址,请定义一个 const
变量 (C++)。
使用常量而不是宏通常被认为是良好的做法,因为它们实际上代表变量,具有自己的作用域规则和数据类型。宏是全局的、无类型的,在大型程序中,它们很容易使读者感到困惑(因为读者看不到实际存在的内容)。
#define
定义宏。宏只会导致一个标记序列被不同的标记序列替换。指针和宏是完全不同的东西。
如果“
#define
常量”指的是扩展为数值的宏,那么答案仍然是否定的,因为在任何使用宏的地方,它都会被该值替换。例如,无法获取指向数字 42
的指针。
不,这在 C/C++ 中是不可能的
您可以使用#define指令为程序中的常量指定一个有意义的名称
我们可以以两种形式使用。
请:请参阅此链接
http://msdn.microsoft.com/en-us/library/teas0593%28VS.80%29.aspx
#define 指令可以包含类似对象的定义或类似函数的定义。
我很抱歉我无法再提供一个眨眼...请参阅 IBM 链接..因为下面我粘贴了链接
您可以从以上两个链接获取完整信息
有一个方法可以解决这个问题:
#define ROW 2
void foo()
{
int tmpInt = ROW;
int *rowPointer = &tmpInt;
// ...
}
或者如果你知道它的类型,你甚至可以这样做:
void getDefinePointer(int * pointer)
{
*pointer = ROW;
}
并使用它:
int rowPointer = NULL;
getDefinePointer(&rowPointer2);
printf("ROW==%d\n", rowPointer2);
并且你有一个指向 #define 常量的指针。