2011-02-23 163 views
1
*(*(p+a)+b) 

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

回答

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 
+0

这是有道理的。我没有想到指针指针的多维数组。然后,解引用会产生一个指针,编译器或其他东西允许值成为地址。 – user490735 2011-02-23 11:16:55