问: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的访问越界!