簡體   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