c 指针运算的过程

代码如下:

#include <stdio.h>
#define MAX 10

int i_array[MAX] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *i_p, count;
float f_array[MAX] = {.0, .1, .2, .3, .4, .5, .6, .7, .8, .9};
float *f_p;

int main(void)
{
    i_p = i_array;
    f_p = f_array;
    for (count = 0; count < MAX; count++)
    {
        printf("%d\t%f\n", *i_p++, *f_p++);
    }
    return 0;
}
``
求解*i_p++和*f_p++的执行过程,怎么从指向第一个元素到最后把下一个元素输出的?
阅读 2k
2 个回答

i_p = i_array;
*i_p = i_array[0];
*i_p++ = *(i_p + 1) = *i_p + sizeof(int) * 1 = i_array[1]

在c语言中后缀自增++的优先级高于解引用*的优先级,所以先做++,再*,即*(ip++),c语言运算符可以参考这里;自增操作有两种情况,如果++符号在后面ip++,则ip先进行复制返回,再执行ip=ip+1,如果++符号在前面++ip,则执行ip=ip+1,然后返回。所以*ip++可以看成两步:(1)返回*ip的值;(2)根据ip的类型移向下一个元素;代码中printf输出的就是第(1)步中的值。如果ip指向比较复杂的类型,则++ip省去复制的操作会更加高效;可以参考这里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进