为什么跟随C代码编译没有错误?

时间:2014-02-19 05:34:11

标签: c

我的代码如下:

void main()
{
    int gdriver=DETECT, gmode;

    initgraph(&gdriver, &gmode, " ");

    getch();

    closegraph();
}

虽然图形模式(gmode)的值尚未初始化,但它的地址已经传递给程序......并且编译时没有错误!

在没有初始化该变量的情况下传递变量的地址是不错的?

3 个答案:

答案 0 :(得分:2)

您传递了gmode的地址,而不是对它的引用。您无需初始化gmode,因为函数initgraph()可能会这样做。

您可能会收到警告,具体取决于您使用的编译器和编译器选项。

答案 1 :(得分:0)

首先,虽然你也标记了C ++,但在上面的代码中,参数的传递不是通过引用传递,而是传递值。

graphics mode(gmode) has not been initialized

其次,它不应该给你一个错误,因为它不是一个引用变量。

答案 2 :(得分:0)

现在我得到了答案......当我们写gdriver=DETECT时,它会为gdrivergmode返回两者的值。

这是因为DETECT是枚举数据类型,它将gdrivergmode映射到相应的图形驱动程序和模式值。这就是我们在传递地址之前不需要初始化gmode的原因。