Rei*_*ugh -7 c c++ arrays pointers
在数组中使用.和之间有什么区别->?那是:
(*foo[i]).bar
Run Code Online (Sandbox Code Playgroud)
VS
foo[i]->bar
Run Code Online (Sandbox Code Playgroud)
或者:它们是一样的吗?
编辑: BTW,其他参考只在foo.bar和之间询问foo->bar.我知道不同之处.但是最近,我正在阅读一些(*foo).bar我认为应该使用的样本foo->bar.
假设foo是一个在数组中使用的简单POD用户定义类型,那么这两个语句当然不一样.您可能知道,以下所有内容对于上述上下文具有相同的语义含义:
*foo
*(foo + 0)
foo[0]
0[foo]
Run Code Online (Sandbox Code Playgroud)
如果您将2个语句替换为第3个表单,则可以获得:
(*foo)[i].bar ==> foo[0][i].bar
Run Code Online (Sandbox Code Playgroud)
VS
foo[i]->bar ==> (*foo[i]).bar ==> foo[i][0].bar
Run Code Online (Sandbox Code Playgroud)
您可以通过简单的测试来确认:
#include <stdio.h>
#include <assert.h>
struct foo_t
{
int bar;
};
int main()
{
foo_t foo[2][2] = { { {0xdeadbeef}, {0xbadbeef} },
{ {0xbadf00d}, {0xdecafbad} } };
assert((*foo)[1].bar == foo[0][1].bar);
assert(foo[1]->bar == foo[1][0].bar);
assert(foo[1]->bar != (*foo)[1].bar);
printf("(*foo)[1].bar: %x\n", (*foo)[1].bar);
printf("foo[1]->bar: %x\n", foo[1]->bar);
}
Run Code Online (Sandbox Code Playgroud)
如果它们是相同的,那么第三个断言就会失败,输出就不会是它.