C NULL与空结构相同

时间:2014-04-08 07:19:22

标签: c struct null

所以说我有一个只有几个值的基本结构:

struct my_struct {
    int val1;
    int val2;
}

我希望将它传递给函数

int test_the_struct(struct my_struct *s);

然后在该函数内部检查NULL并返回错误代码,但是如果传递一个空结构,我希望它继续。例如:

struct my_struct *test_struct = (struct test_struct *) calloc(1, sizeof(struct test_struct));
test_the_struct(NULL); //this should fail
test_the_struct(test_struct); //this should not fail

我怎么能区分这两者?在这种情况下,我不能改变my_struct

的结构

3 个答案:

答案 0 :(得分:2)

如果我理解正确,你就不会有问题。

只需检查针对NULL的指针即可。

int test_the_struct(struct my_struct *s)
{
    if (s) { // or if (s != NULL) or whatever you want to express it...
        return s->val1 + s->val2;
    } else {
        return 42;
    }
}

如果您使用test_struct调用它,则两个值均为0。它没有任何错误或特殊之处。

答案 1 :(得分:0)

要查找指针s是否为空,您可以使用

if (s) {
    /* not null */
} else {
    /* is null */
}

指向"空"的指针struct不为null。

答案 2 :(得分:0)

设计你的功能如下

int test_the_struct(void *ptr)
{
if (ptr == NULL)
     return -1; //error
else 
     return 0;
}