虽然(*p ++)危险吗?

Igo*_*gor 3 c arrays pointers

使用while(*p++)检查如果一个数组的多个元素危险?

如果在下一个内存位置有一些值并且该值不是数组的一部分,可能会出现问题.

这个简单的代码:

#include <stdio.h>

void f(float *p) {
    printf("%p : %.f\n", p, *p);
    while(*p++){
        printf("%p : %.f\n", p, *p);
    }
    printf("%p : %.f\n", p, *p);
}

int main() {
    float p[] = {2.2, 3.2};
    f(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出这个输出:

0x7fffed4e8f10 : 2
0x7fffed4e8f14 : 3
0x7fffed4e8f18 : 0
0x7fffed4e8f1c : 0
Run Code Online (Sandbox Code Playgroud)

那么,如果在0x7fffed4e8f18上,该值为≠0会使我的代码错误吗?

sep*_*p2k 8

一旦p超出了数组的边界,解除引用就会调用未定义的行为.所以是的,这样做很危险.

  • 这就是为什么你看到每个以数组作为参数的api也需要一个长度作为第二个参数. (2认同)