使用指针作为循环增量器而不是通常的"int i"是一个坏主意吗?

7 c c++ pointers loops

一个例子是:

char str[] = "Hello";
int strLength = strlen(str);

for (   char * pc = str;
        pc < str + strLength;
        pc++)
{
    *pc += 2;
}
Run Code Online (Sandbox Code Playgroud)

编辑:计入写保护内存问题.

ago*_*nst 8

我的一个问题是,如果你在for循环中省略*in*pc,你会有很多乐趣.哎呦?更一般地说,重新分配指针和修改值之间的区别有点难度.

但是,(虽然我没有它的方便),Stroustroup自己认可(参见编辑)C++编程语言书中的指针迭代.基本上,您可以使用指针算法在两个char数组之间进行非常简洁的字符串比较实现.

简而言之,我建议以"只读"的方式使用这样的指针.如果你需要写入数组,我会使用更传统的i.

当然,这是我个人的偏好.

编辑:Stroustroup不支持指针迭代超过整数 - 他只是在书中的某一点使用它,所以我的理由是他不认为它是良好实践的anethema.

  • 它们不仅仅是指针.这是一种非常天真的思考方式.是的,在简单的情况下,它们是美化的指针,但在其他情况下,它们肯定不是.更不用说你可以更加符合迭代器,并使用带有迭代器的`std :: algorithms`. (5认同)

Bri*_*tow 8

使用你不完全理解的结构总是一个坏主意.这延伸到那些必须在你之后阅读你的代码的人......(我认为这是"不要成为一个聪明的程序员"规则的必然结果)

在这种情况下,如果你理解并完全熟悉构造,那么它本身就没有任何错误...但通常,如果你不得不问这是不是一个坏主意,那么你对它不是很满意...

  • "使用你不完全理解的结构总是一个坏主意."如果你的目标是永远不会学习. (5认同)