让我们进行以下两次指针访问:
char poBuffChar[100];
Case 1:
(void *)&poBuffChar[10];
Case 2:
(void*)(&poBuffChar)[10];
如果我理解正确,第一种情况我选择了我的char缓冲区的成员,选择一个指向该成员的指针并将该指针(这是char*
)转换为指向void的指针。在第二种情况下,实际上我不确定它是做什么xD但是问题是第一种情况给了我一个“警告:取消引用无效*”(或类似的东西),而第二种情况没有给我任何警告。
问题是:通过从案例1改为2,我是否处理相同的结果?也就是说,第二个代码是否访问与第一个代码相同的数据?
修改
嗯,似乎有区别:在第二种情况下运行代码只是给出了分段错误。但是仍然需要一些澄清(以及关于如何摆脱警告的一些建议,因为我知道第一个可用的解决方案不起作用)
答案 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
个字节指向数组的开头。