if(指针)条件内的递增指针

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)在这种情况下还有什么其他目的呢?

hac*_*cks 6

其目的是检查指针_array是否指向NULL,即检查它是否是NULL指针.

new抛出std::bad_alloc异常,因此无需检查NULL.如果malloc, calloc, reallocnew(std::nothrow),如果分配失败,他们返回NULL.在这种情况下,您需要检查NULL.