指针算术的奇怪结果

时间:2014-03-04 20:40:52

标签: c pointers

我编写了以下程序来理解指针算法。第二个输出似乎很奇怪,因为指针'cp'被声明为const char **。没有任何强制转换,当我执行(cp + 1)而不是{{1}时,我希望它会增加'1'输出显示。

'8'

2 个答案:

答案 0 :(得分:4)

  

如果没有任何强制转换,我会期望[const char **]在输出(cp + 1)而不是'8'时增加'1',如输出所示。

否 - 指向指针的指针会增加指针的大小,指针的大小为8。

答案 1 :(得分:3)

  

没有任何演员,当我输出(cp + 1)而不是输出显示的'8'时,我希望它增加'1'。

你可能会想到,但你错了。增加指针时,增量的大小是指针指向的东西的大小,在这种情况下是8个字节(指针的大小)。

如果你想一下这一点,那就比增加1个字节更有意义。如果你有一个指向一系列事物的指针,无论这些事物是整数还是其他指针或结构,通过添加n+1th能够获得数组中的n项是很有用的。如果指针总是增加1个字节,则必须编写类似:p += (n * sizeof(MyStructType));的内容。在大多数情况下,这样做会更难以阅读,也更容易出错。另一方面,能够将指向结构的指针增加1个字节并没有多大好处 - 这是导致错位错误的可靠方法。