[英]Issue passing struct through method/function in c
我在使用以下方法时遇到问题。 它应该将mq.queue[qCounter].id
的值更改为在ident
中找到的值, mq.queue[qCounter].id
,但在方法完成后该值不会保留在外面。 它似乎只在方法中发生变化。 我尝试取消引用属性mq
但是没有编译错误但是程序在到达该方法时停止运行。 任何想法如何修复它/使用方法/函数实现同样的事情?
void createQ(MsgQs_t mq, int ident){
int taken=0;
for(int i=0;i<3;i++){
if(mq.queue[i].id==ident){
printf("That Queue Id is already taken\n");
taken=1;
}
}
if(taken==0){
mq.queue[qCounter].id=ident;
printf("THE INNER ID IS %d and the qCounter is %d\n", mq.queue[qCounter].id, qCounter);
qCounter++;
}
}
以下是上面使用又名“MsgQs mq”的结构体:
typedef struct MessQ {//A single message queue
char message[MQS][MLN];
int id;
}MessQ_t;
typedef struct MsgQs {//An array of message queues
MessQ_t queue[MQA];
}MsgQs_t;
在函数createQ
参数MsgQs_t mq
用作pass-by-value
,因此调用者组件在mq
编辑时不会有任何更改
将代码更改为pass-by-reference
例如,
void createQ(MsgQs_t *mq, int ident){
// ^^^^^^ Here
int taken=0;
for(int i=0;i<3;i++){
if(mq->queue[i].id==ident){
// ^^^^^^ Here change dot(.) to this (->) for access
printf("That Queue Id is already taken\n");
taken=1;
}
}
if(taken==0){
mq->queue[qCounter].id=ident;
printf("THE INNER ID IS %d and the qCounter is %d\n", mq->queue[qCounter].id, qCounter);
qCounter++;
}
}
在调用函数时发送地址如下,
createQ(&mq, indent_value);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.