[問題] Pthread中傳入void*[]的疑問
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Pthread
問題(Question):
void *print(void *args) {
int* a = args[0]; //error:void value not ignored as it ought to be
//warning: dereferencing 'void*' pointer
printf("integer: %d\n", *a);
return NULL;
}
int main() {
pthread_t thread1;
int a=1;
char str[]="test";
void* arr[] = {&a, str};
pthread_create(&thread1, NULL, &print, arr);
return 0;
}
我有檢查了一下各變數的位址
&a 和 arr[0] 和 args[0]的值都是一樣的。
但是為什麼int *a無法接args[0]的值?
後來我有查到正確的寫法如下
int *a = ((void**)args)[0]; 這樣寫就沒有問題
不懂的是為什麼args要先轉型(cast)成void**才會過?
可是明明a是一個int pointer啊?
先謝謝了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.170.134
推
10/19 13:53, , 1F
10/19 13:53, 1F
其實看了還是不太懂是什麼意思
→
10/19 14:03, , 2F
10/19 14:03, 2F
我覺得args[0]存的是&a, int的pointer
args[0]本身位址應該是一個void*的pointer 應該沒錯吧
→
10/19 14:05, , 3F
10/19 14:05, 3F
了解,剛試了一下,
但是我還是不懂為什麼要cast成(void**)型態,
就是必需寫 int *a = *((void**)args);
而不是寫成 int *a = *args;
→
10/19 14:08, , 4F
10/19 14:08, 4F
→
10/19 14:09, , 5F
10/19 14:09, 5F
→
10/19 14:10, , 6F
10/19 14:10, 6F
※ 編輯: fenir 來自: 1.34.170.134 (10/19 15:08)
※ 編輯: fenir 來自: 1.34.170.134 (10/19 15:17)
推
10/19 15:21, , 7F
10/19 15:21, 7F
→
10/19 15:21, , 8F
10/19 15:21, 8F
→
10/19 15:22, , 9F
10/19 15:22, 9F
→
10/19 15:23, , 10F
10/19 15:23, 10F
→
10/19 15:23, , 11F
10/19 15:23, 11F
→
10/19 15:36, , 12F
10/19 15:36, 12F