問:Vxworks操作系統啟動一個任務的函數是taskSpawn(char* name, int PRiority, int options, int stacksize, FUNCPTR function, int arg1,.. , int arg10),它只接受整型參數,我該怎么辦才能給它傳一個結構體(在32位PowerPC平臺下)?
下面來剝Windows程序設計中消息傳遞函數兩個參數的皮,看看它們究竟是什么: typedef UINT WPARAM; typedef LONG LPARAM; 原來,WPARAM和LPARAM其實都屬于“泛整型”,所以不要報怨消息處理函數只能接受“泛整型”。實際上,從指針的角度上來講,在C/C++中,可以獲得任何類型實例(變量、結構、類)的指針,所以Windows的消息處理函數實際上可以接受一切類型的參數。
驚天動地一句話:“泛整型”可表征一切。
更多內容請看C/C++技術專題 Java編程開發手冊專題,或 (14)“值傳遞一定不會改變參數”
理論而言,值傳遞的確不會改變參數的內容。但是,某年某月的某一天,隔壁Office的碩士mm寫了這么一段程序,參數的值卻被改變了: int n = 9; char a[10]; example ( n, a ); //調用函數example(int n,char *pStr) printf (“%d”, n ); //輸出結果不是9 大概整個office的人都被搞懵了,都說編譯器瞎搞,有問題。找到筆者,筆者憑借以往的經常,一眼就看出來不是什么編譯器出錯,而是在函數example內對字符串a的訪問越界!