我是 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 是迄今为止使用过的最困惑的语言。这个任务应该很简单,但我很迷失,因为我猜测应该在变量上放置多少个 * 或 & 只是为了调用它。
最佳答案
您应该通过pthread_create
将参数
的地址传递给request_handler
函数。但由于它是局部变量,因此不适合传递其地址。
因此将其定义为指针并为其分配内存。
struct params *parameters = malloc(sizeof(*parameters));
使用->
适当设置成员,并按原样传递。
更新:还有一些错误
- 将
params
的定义移至顶部request_handler
函数之前。 - 在 main 中定义
parameters
一个params *parameters
而不是struct params *parameters
- 使用
parameters->
来访问成员,而不是parameters。
无论它是指针。
关于C - 将多个指针作为参数传递给 pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117201/