检查数组值是否为NULL,即是否已设置

时间:2015-09-24 10:19:45

标签: c arrays null

如果数组未初始化,则该数组将获取垃圾值。要检查数组是否为NULL,我们将在声明时使用NULL0初始化数组。

如果用户为数组插入值0,则表示[1] = 0,并且他没有给出a[3]的值,但a[1] = 0 a[3] = 0。< / p>

不将数组初始化为NULL

 #include <stdio.h>
main(){
    int i, a[5];
    a[0] = 0;
    a[1] = 2;
    a[3] = 4;
    a[4] = 5;
    for (i = 0 ; i < 5 ; i++){
        printf("%d ", a[i]);
    }
}

此处a[2]有一些垃圾值。

将数组初始化为NULL0

#include <stdio.h>

main() {
    int i, a[5] = {0};
    a[0] = 0;
    a[1] = 2;
    a[3] = 4;
    a[4] = 5;
    for (i = 0 ; i  <5 ; i++) {
        printf("%d ", a[i]);
    }       
}

此处未插入a[2],但它取值0

如果用户的输入是 0 (此处为a[0] = 0),那么他怎么能真正知道该值是否已插入

1 个答案:

答案 0 :(得分:1)

首先问题在于您似乎对NULL0存在误解。在C NULL中通常是数字0,但是适合任何类型的东西。因此,虽然您不应该依赖它,也不应该使用它,int i = NULLint i = 0相同。这导致了一般问题:

&#34; NULL&#34; /&#34; OPTIONAL&#34; /&#34; NIL&#34; /&#34; NOT_SET&#34;值

对于指针,可以通过将它们设置为NULL来轻松完成,因为有效指针将具有任何值,但为NULL 。对于普通类型(例如int)执行此操作本身不可行,因为如果int可以所有整数/ Z 您希望在哪里把你的&#34;特殊&#34;值?!这就是为什么经常使用指针而不是直接类型,或者在C ++中使用像boost optional这样更奇特的东西的原因。

所以你必须写下这样的东西:

#include <stdlib.h>
#include <stdio.h>

#define ARRAY_SIZE 5

int main (void)
{
    int number = 42;
    int *array[ARRAY_SIZE] =  {0};

    array [2] = &number;

    int i;
    for (i = 0; i < ARRAY_SIZE; i++){
        if (array[i] != NULL){
            printf("Position %d was set to %d\n",i,*array[i]);
        }
    }

    return 0;
}

但是在使用auto(&#34; stack&#34;)变量的地址时要谨慎,通常您必须使用dynamic个变量,即使用malloc和{ {1}}。