指向#define的指针

时间:2010-12-17 05:10:02

标签: c c-preprocessor

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

5 个答案:

答案 0 :(得分:12)

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

因此,如果您输入:

#define NUMBER 100

然后你输入:

int x = NUMBER;

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

int x = 100;

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

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

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

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

我们可以使用两种形式。

请:查看此链接

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

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

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

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

答案 4 :(得分:0)

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

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