第八章指针训练pta


 int i, j, k = 5, *p;
    
  p = &k;
  i = ++(*p);
  j = (*p)++;
 printf("%d %d %d", i, j, k) ;

下面程序段的运行结果是
6 6 7
解释一下吧

p是k的地址
i=++( * p),相当于i=++k,所以,i和k都变为6,因为++在前时,先加1,再运算
j=( * p)++相当于j=k++,因为++在后,所以先赋值,然后k再加1,因此j=k=6,然后k=7
因此最后i,j,k分别为6,6,7

  1. p = &k; 将指针 p 指向变量 k 的地址。

  2. i = ++(*p); 这里首先对 (*p) 进行前缀自增操作,也就是将 k 的值加 1,此时 k 变成了 6,然后将这个新值 6 赋给 i。

  3. j = (*p)++; 这里先将 (*p) 的值 6 赋给 j,然后对 (*p) 进行后缀自增操作,也就是将 k 的值再加 1,此时 k 变成了 7。

  4. printf("%d %d %d", i, j, k); 输出结果为 "6 6 7"。

因此,最终的输出结果是 i=6,j=6,k=7。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^