私は C に不慣れで、これらのポインターの概念は私にとって非常に混乱しています。とても単純に見えることをしようとしていますが、多くのコンパイル エラーが発生しています。
新しいスレッドを生成し、複数のポインターをパラメーターとして渡したい (c でグローバル変数を使用できる唯一の方法はポインターを使用する方法のようです) ため、これらすべてのポインターを保持する構造体を作成しましたが、コンパイルされないようです。私が何を変えても。
これが私のコードです(私の問題があると思われる場所を除いて、ほとんどのコードを取り出しました)
//want to store the pointers in pointers, so when I change a pointer it changes the "global" variable
void request_handler(params *parameters) {
params parameter = *parameters;
int *numberOfOtherServers = parameter.numberOfServers;
int *clientSock = parameter.clientSock;
char ***serverList = parameters.serverList;
struct function **functionList[10] = parameters.functionList[10];
}
typedef struct {
int *clientSock;
int *numberOfServers;
char **serverList;
struct function *functionList[10];
} params;
struct function {
char name[20];
int parameterNumer;
int canDo;
char *otherServers[10];
};
int main(int argc, const char * argv[])
{
int client_sock_desc;
pthread_t handler_thread;
struct function functionList[10] = {{"",0, 0, {}}};
int i =0, numberofOtherServers;
char *serverList[10];
//create a struct to pass as the parameters
struct params parameters;
parameters.clientSock = &client_sock_desc;
parameters.functionList[10] = functionList;
parameters.numberOfServers = &numberofOtherServers;
parameters.serverList = serverList;
//create a thread for the new clients request to be handled
if(pthread_create(&handler_thread, NULL, request_handler, parameters) != 0) {
perror("pthread_create failed");
}
}
Cは、これまでに使用されたとしても、はるかに厄介な言語です。このタスクは非常に単純なはずですが、それを呼び出すためだけに変数に * または & i をいくつ配置する必要があるかを推測しているため、私はとても迷っています。