澄清指针算术

时间:2011-02-23 11:00:23

标签: c pointer-arithmetic

*(*(p+a)+b)

如果将*尺寸添加到地址(p),那么为什么将b *尺寸添加到*(p + a)? *(p + a)似乎是该位置的值,并且向其添加b *大小将改变其值,而不是地址。但是,根据我读到的内容,这意味着要添加到地址中。

1 个答案:

答案 0 :(得分:4)

考虑到你的表达式,并假设你在谈论C,p必须是指向指针的指针。会发生什么:

char ** p;
int a = 2;
int b = 4;

(p+a) // adds 2 * sizeof(char *)
*(p+a) // evaluates to a char *
char * c = *(p+a)
(c+b) // adds 4 * sizeof(char)
*(c+b) // evaluates to a char