C / C ++:访问给定类型指针的位置与访问另一种类型指针的相同位置是不同的?

时间:2014-09-16 14:20:00

标签: c++ c pointers

让我们进行以下两次指针访问:

char poBuffChar[100];

Case 1:

(void *)&poBuffChar[10];

Case 2:

(void*)(&poBuffChar)[10];

如果我理解正确,第一种情况我选择了我的char缓冲区的成员,选择一个指向该成员的指针并将该指针(这是char*)转换为指向void的指针。在第二种情况下,实际上我不确定它是做什么xD但是问题是第一种情况给了我一个“警告:取消引用无效*”(或类似的东西),而第二种情况没有给我任何警告。

问题是:通过从案例1改为2,我是否处理相同的结果?也就是说,第二个代码是否访问与第一个代码相同的数据?


修改

嗯,似乎有区别:在第二种情况下运行代码只是给出了分段错误。但是仍然需要一些澄清(以及关于如何摆脱警告的一些建议,因为我知道第一个可用的解决方案不起作用)

1 个答案:

答案 0 :(得分:3)

&poBuffChar[10]的类型为pointer to char,并指向数组poBuffChar的第11个元素。

(&poBuffChar)[10]11th element of an array of (arrays of chars of size 100),其第一个元素据称是poBuffChar(整个数组)。此元素的类型为array of char of size 100,与poBuffChar本身非常相似。它将10 * 100 = 1000个字节指向数组的开头。

Coliru Demo