澄清指针符号

inb*_*der -1 c

在查看一些C代码时,我遇到了以下示例.

*(dates +2) I get that this is the 3rd element of the array
Run Code Online (Sandbox Code Playgroud)

.

*dates +2   2 added to the value of the 1st element.
Run Code Online (Sandbox Code Playgroud)

有没有理由使用这种表示法:日期[2]

日期[2]似乎更清晰.

Mic*_*ael 5

完全如您所期望的那样,括号决定了操作的优先级.

*(dates+2)将添加到指针dates创建一个新指针.指针递增多少取决于指针所指向的数据类型的大小,例如,如果dateschar *类型,则a char是1个字节,dates递增2.但是,if dates是指向64的指针字节结构,然后将128添加到指针.无论哪种方式,我们的想法是,当对指针执行数学运算时,指针的新值将与另一个有效的数据位对齐(当然,除非你在缓冲区上运行缓冲区).指针数学完成后,指针将被解引用,并返回新指针的值.

*dates+2没有指针数学的情况下,返回指针的值并向其添加2.

更常见的符号*(dates+2)dates[2].