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