函數指針C
回答
指針必須用%p
打印。無論如何,這裏存在一個「鋸齒」問題,但很奇怪,但它是這樣的:main獲得函數main的第一個參數的值,即通常稱爲「argc」的值。如果你用更多的參數來調用它,你應該看到更大的數字。
當然,通過使用函數的第一個參數的名稱將'main'作爲func「ghosted」,'%i'是合適的,因爲'main'結束爲一個整數。 – ShinTakezou
**數據**指針必須用%p打印(參考:「參數應該是一個指向void的指針」(7.19.6.1))。函數指針不能轉換爲void *,只能轉換爲其他函數指針類型。 –
@帕斯卡我想這是一個曲解。在其他地方,有人可能會說一個指針(不管是什麼)不能保證適合任何整數類型的大小,這樣就無法打印它, %lu,%llu.Function指針可以轉換爲void *(引用std部分禁止它,UB?;我試過gcc -ansi -strict並且沒問題)。引用的句子說%p得到了「generic 「指針,沒有任何引用,明顯;它沒有說它必須指向」數據「(代碼是數據,btw)。 – ShinTakezou
因爲程序的main
函數的第一個參數是參數計數(加1,因爲程序的名稱是第一個參數)在運行時。假設你在沒有參數的情況下調用你的程序,那麼這個值將被填充一個整數。
許多人傳統上使用main
具有以下特徵:
int main(int argc, char **argv);
如果刪除參數,你可能會得到你想要的東西:
int main() {
printf("%i", main);
return 0;
}
如果不行,請嘗試聲明高於函數定義的int main();
。
如果這不起作用,首先問自己爲什麼要這樣做。 :-P
你宣佈與名稱的參數「main
」 - 這PARAM對應main
功能的C
的第一個參數而這又通常被稱爲「argc
」這又是1,如果你開始你的程序沒有任何命令參數。
main的第一個參數通常被稱爲argc
,它告訴你程序運行了多少個參數。既然你沒有參數運行這個值,那麼這個值就是1(可執行文件的名字)如果你從命令行運行這個參數,那麼額外的參數用空格分開,這個數字將會增加。
這相當於
#include <stdio.h>
int main(int main) {
printf("%i",main);
return 0;
}
所以main
是main
函數的第一個參數。如果不帶參數調用,argv數組的大小爲1,argv [0]保存進程的名稱。
您包括main
作爲功能main
的參數。這會得到通常給予main
的第一個值,即傳遞給程序的參數的大小。如果您沒有將參數傳遞給程序,那麼參數仍然包含正在執行的程序的名稱,因此參數列表的大小是1,它打印的是什麼。
- 1. c函數指針反函數指針
- 2. C指針函數
- 3. C:函數指針
- 4. C#函數指針
- 5. C#函數指針
- 6. 指針函數C++
- 7. C++函數指針
- 8. 函數指針C
- 9. c函數指針
- 10. C函數指針鑄造空指針
- 11. C++中函數指針的指針
- 12. C++通過函數指針指向另一個函數指針
- 13. C++ - 指針函數參數
- 14. C++函數指針語法
- 15. C++函數成員指針
- 16. C++函數指針'base'
- 17. C++重載函數指針
- 18. 瞭解c函數指針
- 19. 函數指針用C
- 20. c函數指針解釋
- 21. C函數指針分配
- 22. 函數返回指針C
- 23. C編程,函數指針
- 24. C++函數指針內聯
- 25. C++函數指針誤差
- 26. C++成員函數指針
- 27. C函數指針混亂
- 28. 函數指針地址(C++)
- 29. C++模板函數指針
- 30. C:指針內聯函數
'main'不會是'int',所以由於'%i'你總是有未定義的行爲 - 所有的注單都關閉了,所以它不妨去吃IDE的日誌文件並打印第一個數字它發現它。 – delnan