【发布时间】:2022-01-05 19:04:42
【问题描述】:
我有一个分配的数组,需要遍历所有字段并比较非空值。这个数组中的值也可以是 0,这给我带来了一些麻烦。
int size = 4;
int *numbers = (int*) malloc(size * 4);
// Fill some fields
numbers[0] = 3;
numbers[1] = 0;
numbers[2] = 6;
// Search and find min value's index
int min = 0;
for (int i = 0; i < size; i++) {
if (numbers[i] != NULL) {
if (numbers[i] < numbers[min]) min = i;
} else {
// Code if value is null here
}
}
printf("%d\n", min);
我不确定如何正确地与 NULL 进行比较。正确的方法是什么?
【问题讨论】:
-
在C中,NULL和0没有区别。
-
@Klas-Kenny 好吧...
0只是一个整数文字,而NULL是((void *)0) -
您确实不想将
int值与NULL进行比较,而您确实想与0进行比较。 99.44% 的系统,NULL为零,但这不是保证。此外,大多数系统都这样做:#define NULL ((void *) 0),因此编译器应该标记int值与指针的比较 -
@CraigEstey 但是可以保证,零整数文字,或这种转换为指针类型的文字等价于
NULL,即使它的空指针的内部表示类型并非全为零。 -
C 中的整数变量不可为空,就像您在其他编程语言中习惯的那样。