0
私は与えられた最大2つの数字を見つけることができる仕事を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);
}
が、Linuxでのgccを使用して私が得たこれらのエラー::私は(askisi.cという名前)を書いた最初のプログラムは以下の通りであった
は、今多くの研究の後、私はことを発見し 私機能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);
}
最初の問題は、私は私の最初のプログラムが動作しなかった理由上の任意の説明を見つけることができませんでしたということです。 2番目は、char **arguments = (char**)param;
の指示が実際に何をしているのかわかりませんでした。
しかし、このキャスト後に 'arguments [1]'ではなく 'arguments [1]'で要素を参照するのはなぜですか? – asdf
'arguments'はcharの配列へのポインタです(わかりやすくするために、文字列の配列へのポインタを言うことができます)。だから、char(またはstring)の最初の配列にアクセスしたい場合は、 '*(arguments + pos)'または 'arguments [pos]'を使うことができます。また、 'arguments'自身が' arguments [0] 'を指しています。 より良いアイデアを得るには、 –
が行うことになる 'Cの配列添字について[http://users.ece.utexas.edu/~valvano/embed/chap8/chap8.htm]を読むことをお勧めします。ありがとう – asdf