0
所以我試圖做一個程序,在c中創建一個線程,其工作是找到2個給定數字的最大值。我寫(名爲askisi.c)的第一個節目是如下:傳遞數組到pthread_create
#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
int max;
void *max_of_two(void *param);
int main(int argc , char *argv[])
{
pthread_t tid;
pthread_attr_t attr;
if (argc != 3)
{
fprintf(stderr,"You have to give 2 numbers... \n");
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid,&attr,max_of_two,argv);
pthread_join(tid,NULL);
printf("max = %d\n",max);
}
void *max_of_two(void *param)
{
if(atoi(*param[1]) >= atoi(*param[2]))
max = atoi(*param[1]);
else
max = atoi(*param[2]);
pthread_exit(0);
}
現在很多的研究後,我發現我的功能max_of_two
應該這樣寫:
void *max_of_two(void *param)
{
char **arguments = (char**)param;
if(atoi(arguments[1]) >= atoi(arguments[2])){
max = atoi(arguments[1]);}
else
max = atoi(arguments[2]);
pthread_exit(0);
}
的第一個問題是,我沒有找到爲什麼我的第一個程序沒有工作任何解釋。第二個是我沒有找到一個可以理解的解釋,說明char **arguments = (char**)param;
的實際操作。
好的,但爲什麼在這個鑄造後im引用具有'arguments [1]'而不是'* arguments [1]'的元素? – asdf
'arguments'是一個char數組的指針(爲了更容易理解,我們可以說它是一個指向字符串數組的指針)。所以,如果你想訪問第一個char(或字符串)數組,你可以使用'*(arguments + pos)'或'arguments [pos]',因爲它們是等價的。另外'arguments'它自己指向'arguments [0]'。 我建議閱讀關於'C中的數組下標'[http://users.ece.utexas.edu/~valvano/embed/chap8/chap8.htm]以獲得更好的想法 –
會做。謝謝 – asdf