c - 将 NULL 设置为结构指针,但在检查时从不设置为 NULL

标签 c kernel point

给定,在调用的函数中,

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/

相关文章:

C语言 : Referencing char arrays in nested struct

linux - 如何为 x86 linux 实现 GPIO 中断处理程序?

java - GridLayout 的移动限制仅限于相邻的网格按钮

c - 命名新的C API

c - C 文件 IO 的奇怪行为

c - 通过复制边值来填充矩阵

c++ - 在使用 NT DDK 构建的用户模式程序中包含 C++ header

linux - 在加载期间将参数传递给依赖的内核模块

c++ - QT c++ 画点 qpainter qgraphicsscene

python - 如何将两个坐标列转换为一列 Shapely 点