给定,在调用的函数中,
void callFunct1 (arg_t *q) {
q = NULL;
};
EXPORT_SYMBOL(callFunct1);
返回空值。
为什么在另一个函数中,q 永远不会为 NULL?我该如何纠正它?
arg_t qH;
arg_t* q;
//
callFunct1 (&qH);
q = &qH;
if (q == NULL) {
.....
}
arg_t 只是一个结构。
最佳答案
指针与 C 中的任何其他非数组变量没有什么不同。当作为参数传递时,如果你想修改输入/输出的内容,你必须通过地址传递。将参数声明为正式的指向类型的指针,并从调用方传递实体的地址,使用解引用运算符 *
访问调用方的值。
就像这样:
void foo(int *p)
{
*p = 5;
}
是这样调用的:
int x;
foo(&x); // x will be 5 on return
指针类型也是如此。如果你想通过地址修改指针,那么地址正是所需要的。将参数声明为指向arg_t
的指针并取消引用它以将引用的指针设置为 NULL:
void foo(arg_t** pp)
{
*pp = NULL;
}
和
arg_t *p;
foo(&p); // p will be NULL on return
关于c - 将 NULL 设置为结构指针,但在检查时从不设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472944/