第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何格式化函數(shù)指針?

如何格式化函數(shù)指針?

C
偶然的你 2019-11-18 14:14:29
有什么方法可以在ANSI C中打印指向函數(shù)的指針?當然,這意味著您必須將函數(shù)指針轉(zhuǎn)換為void指針,但這似乎是不可能的?#include <stdio.h>int main() {    int (*funcptr)() = main;    printf("%p\n", (void* )funcptr);    printf("%p\n", (void* )main);    return 0;}$ gcc -ansi -pedantic -Wall test.c -o testtest.c:在函數(shù)'main'中:test.c:6:警告:ISO C禁止將函數(shù)指針轉(zhuǎn)換為對象指針類型test.c:7:警告:ISO C禁止將函數(shù)指針轉(zhuǎn)換為對象指針類型$ ./test0x4005180x400518這是“有效的”,但不標準...
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

唯一合法的方法是使用字符類型訪問組成指針的字節(jié)。像這樣:


#include <stdio.h>


int main() {

    int (*funcptr)() = main;

    unsigned char *p = (unsigned char *)&funcptr;

    size_t i;


    for (i = 0; i < sizeof funcptr; i++)

    {

        printf("%02x ", p[i]);

    }

    putchar('\n');


    return 0;

}

void *像Dreamlax的答案一樣,將函數(shù)指針修飾為或任何非字符類型都是不確定的行為。


組成函數(shù)指針的那些字節(jié)實際上意味著什么取決于實現(xiàn)。例如,它們可以僅代表函數(shù)表的索引。


查看完整回答
反對 回復(fù) 2019-11-18
?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

使用聯(lián)合可以避免警告/錯誤,但是結(jié)果仍然是(最有可能)未定義的行為:


#include <stdio.h>


int

main (void)

{

  union

  {

    int (*funcptr) (void);

    void *objptr;

  } u;

  u.funcptr = main;


  printf ("%p\n", u.objptr);


  return 0;

}

您可以printf ("%i\n", (main == funcptr));使用if語句比較兩個函數(shù)指針(例如),以測試它們是否相等(我知道這完全違反了目的,并且很可能是無關(guān)緊要的),但實際上輸出了函數(shù)指針的地址,發(fā)生什么情況取決于目標平臺的C庫和編譯器的供應(yīng)商。


查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 505 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號