啊这啧啧啧 发表于 2023-4-27 10:57:39

*++p有点不理解

#include <stdio.h>

int main()
{
      char matrix = {
                'I', 'l', 'o', 'v', 'e',
                'F', 'i', 's', 'h', 'C',
                '.', 'c', 'o', 'm', '!'
      };
      char *p;

      p = &matrix;

      printf("%c", *p);
      printf("%c", *p++);
      printf("%c", *++p);//这一步不太懂
      printf("\n");

      return 0;
}

isdkz 发表于 2023-4-27 11:05:54

这个代码示例声明了一个 3x5 字符矩阵,并将指针 p 指向矩阵中的某个元素。接下来,代码使用 printf 函数打印 p 指向的字符以及其邻近的字符。关于 *++p 这一步,我来为你解释一下。

首先,这是代码中的矩阵:

I l o v e
F i s h C
. c o m !


指针 p 初始化为指向矩阵的第一行第四个元素(索引 ,即字符 'v'):

I l o v e
      ^
F i s h C
. c o m !


接下来,依次执行以下 printf 语句:

1. `printf("%c", *p);`:打印 p 指向的字符,即 'v'。
2. `printf("%c", *p++);`:打印 p 指向的字符,即 'v',然后将 p 向后移动一个字符。现在 p 指向字符 'e'。

I l o v e
      ^
F i s h C
. c o m !


3. `printf("%c", *++p);`:首先,将 p 向后移动一个字符(现在 p 指向 'F'),然后打印 p 指向的字符。

I l o v e
F i s h C
^
. c o m !


所以,最后输出的字符串将是 "vvF"。

请注意,这个代码中的 `*p++` 和 `*++p` 的行为略有不同。`*p++` 先对指针解引用,然后再将指针向后移动;而 `*++p` 先将指针向后移动,然后再对其解引用。
页: [1]
查看完整版本: *++p有点不理解