首页 > 解决方案 > 为什么 p[0]++ 与 C 中的 *(p)++ 不同

问题描述

当我尝试在 C 中执行这些代码时

#include <stdio.h>

int main(void)
{
     int arr[] = {10, 20};
     int *p = arr; 
     p[0]++;   // *(p)++;
     printf("arr[0] = %d, arr[1] = %d",arr[0], arr[1]);
     return 0;
}

输出:arr[0] = 11,arr[1] = 20

在替换p[0]++;*(p)++;

输出:arr[0] = 10,arr[1] = 20

请解释这是为什么。我知道 a[i] 等价于 *(a + i)

标签: arrayspointers

解决方案


表达方式:

p[0]++; 

基本上增加索引 0 处的值。

尽管

*(p)++

增加指向下一个地址的指针。

例子 :

int arr = {10,20};

int *p = arr; // p points to the first element of array, i.e 10
*(p)++; // now p points to the next element i.e 20.

推荐阅读