~~~~我的生活,我的点点滴滴!!
先看下面的程序片段
int Arrys[4] = {1,3,22,33};
int *ptr;
ptr = Arrys;
for(i = 0; i < 4; ++ i)
{
printf("%d: %d\n", i+1, Arrys[i]);
}
*ptr++ = Arrys[*ptr];
for(i = 0; i < 4; ++ i)
{
printf("%d: %d\n", i+1, Arrys[i]);
}
运行完后结果为 3 3 22 33
为什么了,我们要考虑 ++ 与 *的结合性,他们优先级是相等的
在C语言中,自增运算符++和指针运算符*的结合性关系为
左++ > * > 右++
比如 ++ *i 相当于 ++ (*i) ,指针i对应的变量+1。
*i ++ 相当于 * (i++) ,指针i,也就是地址值 +1(其实是加1个变量所占的地址空间)
所以上面的代码中 *ptr++ = Arrys[*ptr]; 其实是 *(ptr++) = Arrys[*ptr]; 对于 ++ -- * 他们结合是从右到左的,优先级是相同的
如果改成 ++ *ptr = Arrys[*ptr]; 相当于 ++(*ptr) = Arrys[*ptr]; 是*ptr的值+1