bas*_*kum 4 c c++ arrays pointers
我正在阅读c ++代码,开发人员经常使用这种模式:
float *_array;
//...
while (expression) {
if (_array) {
// ...
_array += 1;
} else {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
外部while循环将独立于_array指向的位置终止.我的问题是if (_array)该条款中的条件和增量.
我首先想到它应该检查指针是否"耗尽"数组,但这似乎并非如此.我用这个简单的片段测试了它:
float *p = new float[5];
int i = 0;
for (i = 0; i < 10; i++) {
if (p) {
std::cout << "ok\n";
} else {
std::cout << "no\n";
}
p += 1;
}
Run Code Online (Sandbox Code Playgroud)
这将打印10次"ok".因此if (pointer),true即使指针超出定义的数组长度,也要进行求值.
但if (pointer)在这种情况下还有什么其他目的呢?
其目的是检查指针_array是否指向NULL,即检查它是否是NULL指针.
new抛出std::bad_alloc异常,因此无需检查NULL.如果malloc, calloc, realloc或new(std::nothrow),如果分配失败,他们返回NULL.在这种情况下,您需要检查NULL.