看板 C_and_CPP 關於我們 聯絡資訊
#include <stdio.h> int ret; void *(myf) (void *arg) { int *my_arg_L = (int *)arg; printf("myf arg: %p\n", arg); printf("my_arg_L: %d, %d\n", my_arg_L[0], my_arg_L[1]); ret = 99; return &ret; } int create(void *(*start_routine) (void *), void *arg) { printf("arg: %p\n", arg); start_routine(arg); return 0; } int main(int argc, char *argv[]) { int p=2, q=100; int arg_L[2] = { p, q-1 }; printf("arg_L: %p\n", arg_L); int r = create(myf, (void *)arg_L); printf("r: %d\n", r); return 0; } 模擬的程式行為, 讓你參考看看。 ※ 引述《skyHuan (Huan)》之銘言: : 開發平台(Platform): (Ex: Win10, Linux, ...) : Linux : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : pthread : 問題(Question): : 最近在做多執行緒的實作遇到兩個問題 : 1. : 因為pthread_create要呼叫的函式需要的參數是用指標宣告 : 所以函式的參數宣告成(void *) : 我用一個args array傳入參數 : 那這個參數在函式中該怎麼取用呢 : 我寫的直接用arg[0], arg[1]應該是錯的 : compiler會有dereferencing "void *" pointer的warning -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.196.174.254 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1539253589.A.03F.html
skyHuan: 感謝您還想了一個例子,我對函式間的傳遞呼叫有更了解了 10/11 22:45
skyHuan: ! 10/11 22:45
skyHuan: 另外請問一個問題,您create韓式的參數宣告void *(*start 10/11 22:49
skyHuan: _routine) (void *),我的理解是create收一個void型別的 10/11 22:50
skyHuan: 地址,這個地址是函式(*start_routine) (void *)的地址, 10/11 22:50
skyHuan: 所以呼叫時直接傳myf,意思是myf這個函式在當引數時是以 10/11 22:50
skyHuan: 這個函式的地址傳入,這樣對嗎 10/11 22:50
Lipraxde: start_routine 是一個 point 指向回傳 void * 的 funct 10/11 23:57
Lipraxde: ion 10/11 23:57
x246libra: 變數怎麼唸 可以看這篇 https://bit.ly/2PtkDmO 10/12 00:06
skyHuan: 懂了!感謝大家這個板真的好多大神有你們真好>< 10/12 00:12