指向#define的指针

我只是想知道是否有可能指向#define常量的指针。 如果是的话,该怎么做?

#define指令是预处理器的指令,这意味着在编译任何内容之前,预处理器会调用它。

因此,如果您输入:

#define NUMBER 100

然后你输入:

int x = NUMBER;

您的编译器实际看到的只是:

int x = 100;

它基本上就像你在文字处理器中打开你的源代码并进行查找/替换以将每个“NUMBER”替换为“100”。 所以你的编译器不知道NUMBER的存在。 只有预编译预处理器知道NUMBER含义。

因此,如果您尝试获取NUMBER的地址,编译器将认为您正在尝试获取整数文字常量的地址,这是无效的。

不,因为#define用于文本替换,所以它不是一个可以获得指针的变量 – 在代码传递给编译器之前,你所看到的实际上被#define的定义所取代,所以没有什么取地址。 如果需要常量的地址,请改为定义一个const变量(C ++)。

通常认为使用常量而不是宏是一种好习惯,因为它们实际上代表变量,具有自己的范围规则和数据类型。 宏是全局的,无类型的,在大型程序中很容易使读者感到困惑(因为读者看不到实际存在的内容)。

#define定义了一个宏。 宏只会导致一个令牌序列被不同的令牌序列替换。 指针和宏是完全不同的东西。

如果通过“ #define constant”表示扩展为数值的宏,则答案仍然是否定,因为在使用宏的任何地方,它都只是替换为该值。 例如,没有办法获得指针到数字42

不,这在C / C ++中是不可能的

您可以使用#define指令为程序中的常量指定有意义的名称

我们可以用两种forms。

请:看到这个链接

http://msdn.microsoft.com/en-us/library/teas0593%28VS.80%29.aspx

#define指令可以包含类似对象的定义或类似函数的定义。

我很抱歉,我无法提供更多的眨眼…请参阅IBM链接..因为下面我粘贴了linke链接

你可以从以上2个链接获得完整的信息

有一种方法可以解决这个问题:

 #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常量的指针。