指针算术伪装&(array [0])

ste*_*fan 4 c c++ pointers pointer-arithmetic

今天我浏览了一些源代码(这是一个解释软件框架使用的示例文件)并发现了很多这样的代码:

int* array = new int[10]; // or malloc, who cares. Please, no language wars. This is applicable to both languages
for ( int* ptr = &(array[0]); ptr <= &(array[9]); ptr++ )
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,他们已经完成了"获取位于地址的对象的地址array + x".

通常我会说,这是明显的愚蠢,因为写作array + 0array + 9直接做同样的事情.我甚至总是会将这样的代码重写为size_t for循环,但这是一个风格问题.

但过度使用这个让我思考:我是否遗漏了一些明显的东西或者隐藏在语言黑暗角落里的东西?

对于任何想要查看原始源代码的人来说,有了它所有令人讨厌的gotos,mallocs当然还有这个指针的东西,请随时在线查看.

Ed *_* S. 5

是的,第一个没有充分的理由.这是完全相同的事情:

int *ptr = array;
Run Code Online (Sandbox Code Playgroud)

我同意第二,也可以写:

ptr < (array + 10)
Run Code Online (Sandbox Code Playgroud)

当然你也可以将它for设置为0-9 的循环,并将temp指针设置为指向数组的开头.

for(int i = 0, *ptr = array; i < 10; ++i, ++ptr)
    /* ... */
Run Code Online (Sandbox Code Playgroud)

当然,这假设ptr在循环体内没有被修改.