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 + 0或array + 9直接做同样的事情.我甚至总是会将这样的代码重写为size_t for循环,但这是一个风格问题.
但过度使用这个让我思考:我是否遗漏了一些明显的东西或者隐藏在语言黑暗角落里的东西?
对于任何想要查看原始源代码的人来说,有了它所有令人讨厌的gotos,mallocs当然还有这个指针的东西,请随时在线查看.
是的,第一个没有充分的理由.这是完全相同的事情:
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在循环体内没有被修改.