繁体   English   中英

打印的是垃圾值吗?

[英]Is it garbage value that is being printed?

    #include <stdio.h>
    #include <conio.h>
    int f(int a){
        int i,f=1;
        for(i=1; i<a; i++)
            f=f*i;
        return f;
    }
    void main(){
        int k;
        clrscr();
        int (*u)(int);
        u=&f;
        printf("%d", u);
        getch();
    }

上面的代码在TurboC++上打印657并且输出不随时间变化,所以它不是垃圾值吗?

    #include <stdio.h>
    int f(int a){
        int i,f=1;
        for(i=1; i<a; i++)
        f=f*i;
        return f;
    }
    int main(){
        int k;
        int (*u)(int);
        u=&f;
        printf("%d", u);
        return 0;
    }

这个修改后的代码版本返回:

    4199220 on CodeBlocks
    4199728 on DevC++
    134521824 on OnlineIDE
    134513824 on gcc 4.9.2

这些值似乎不会随着不同的运行而改变。 输出当然取决于编译器,但请解释如何生成此输出?

随着声明

printf("%d", u);

您将指针u打印为十进制数,即您打印u的值,即它指向的内容。

该地址可能不同,因为不同的编译器和链接器可能会将其放置在不同的位置,没有“标准”放置函数的位置。

此外,由于您使用格式"%d"来打印指针,因此该行为在技术上是undefined 要打印指针,您应该使用"%p"格式,并将指针强制转换为void * (例如,请参阅printf (和系列)参考以获取更多信息)。

printf("%d", u);

在上面的行中u是一个指向函数的指针。 当您将此地址解释为int并打印它时,行为未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM