如何在C中区分int数组中的empty和0?

时间:2015-08-30 03:39:42

标签: c arrays pointers

我是C的初学者,现在我正在学习指针和动态内存分配。我想编写一个简单的程序来创建空数组并检查给定数字是否存在。这是我的代码:

++j + j*5

但是当我运行程序时,当我寻找0时,我总是得到'是',所以

  1. 有没有办法区分整数0和一个完整的空数组?
  2. 此外,我不确定我的函数/* create an empty array pointer */ int* createArray(){ int *a = (int*) malloc(sizeof(int)); return a; } void findArrayElement(int *list, int element){ int i; int len = (sizeof(list) / sizeof(int)); if (sizeof(list) == 0) { printf("NO\n"); return; } for (i=0; i<len; i++) { if (list[i] == element) { printf("YES\n"); return; } } printf("NO\n"); } int main(int argc, const char * argv[]) { int *p; p = createArray(); printf("size of int is: %lu\n", sizeof(int)); printf("size of p is: %lu\n", sizeof(p)); printf("LENGTH of p is: %lu\n", ARRLENGTH(p)); findArrayElement(p, 2); findArrayElement(p, 0); return 0; } 是否是创建空数组的正确方法。
  3. 谢谢你们。

2 个答案:

答案 0 :(得分:5)

  

有没有办法区分整数0和一个完整的空数组?

如何定义一个空数组?一旦分配了内存块并将其分配给指针,它就已经有了一些值(在alloc的情况下未定义)。最常用的方法是将指针标记为未使用或未分配操作系统为其指定NULL。

  

此外,我不确定我的函数createArray()是否是创建空数组的正确方法。

sizeof返回给定对象(或类型)在内存中占用的字节数。在你的情况下,sizeof(list)返回8,因为它是一个指针。 在oder中分配一个数组,该函数必须接收它的大小。目前它总是仅为一个整数分配大小。

编辑:添加示例。

/* create an empty array pointer */
int* createArray(size_t size)
{
    return (size ? (int*) malloc(sizeof(int)*size) : NULL);
}

所以现在返回的指针应该与数组的大小“耦合”。这意味着接收数组作为参数的每个函数也应该接收它的大小。

答案 1 :(得分:0)

无论内容如何,​​

sizeof都会返回数组指针的内存大小。

编辑:如果它存在于内存中,它将是非零的。

编辑3:删除不准确的信息,查看有关创建变量以记录长度的注释。同样来自注释,请注意您的createArray函数正在为1个整数创建一个数组。在C中,数组具有固定长度。因此,此数组的大小始终相同(无论您是否存储了某些内容)。 sizeof(pointer)将始终返回为指针分配的内存,而不是为其指向的数组分配的内存。