传递一个int指针,然后检查一个值或null

时间:2016-07-04 04:16:36

标签: c pointers null

我想将ptr传递给函数,并让函数确定值是数字还是NULL。这样做的原因是为了避免编写两个函数来检查来自C的内置函数的常见返回错误指示符。

目前,我正在使用两个重复的函数来检查int的{​​{1}}和-1 char *ptr的{​​{1}}。这有点违反DRY,因为两个函数的操作在测试之外是相同的。我考虑过编写第3个函数来处理动作,但我想与社区核实一下是否有更好的方法。

我想要完成的示例代码:

NULL

2 个答案:

答案 0 :(得分:0)

根据您的代码,如果没有分配指针,当您尝试将其引用时,它将崩溃。因此在比较整数值之前更好地验证指针值。

 #include <stdio.h>

// pass a pointer
int foo(int *ptr) {

    // match for int by dereference or if ptr is null
    if (ptr == NULL) 
    {
        printf("match\n");
    } 
    else if(*ptr == -1 )
    {
       printf("match\n");
    }
    return 0;
}

int main() {
    // make a an int
    int a = -1;

    // attempt to make int null?
    a = NULL;

    foo(&a);
    return 0;

}

答案 1 :(得分:0)

或者你可以改变这样的条件顺序:

//传递一个指针 int foo(int * ptr){

// match for int by dereference or if ptr is null
if ((ptr == NULL) || (*ptr == -1)) {
    printf("match\n");
}
return 0;

}

包含NULL指针,条件匹配,无需取消引用。