#include<stdio.h>
int main()
{
int a[]={1,2,3,4,5};
int *p=a;
printf("%d,",*p);
printf("%d,",*(++p));
printf("%d,",(*p)++);
printf("%d,",*p);
printf("%d,",*p--);
printf("%d,",--(*p));
printf("%d\n",*p);
return 0;
}
代码运行结果为1,2,2,3,3,0,0
具体代码解析如下:
第4行 int a[]={1,2,3,4,5}; 定义了一个int型数组a,同时将其初始化为{1,2,3,4,5}
第5行 int *p=a; 定义了一个int型指针p,并使其指向数组a的第一个元素
第6行 printf("%d,",*p); 打印p指向元素的值(数组a的第一个元素1)
第7行 printf("%d,",*(++p)); 先对指针进行自增操作,后打印出p指向元素的值(数组a的第二个元素2)
第8行 printf("%d,",(*p)++); 先打印出p的值,后将p指向元素的值加一(此时指针指向数组a的第二个元素3)
第9行 printf("%d,",*p); 打印p指向元素的值
第10行 printf("%d,",*p--); 先打印p指向元素的值,后p自减(指针指向数组a的第一个元素
第11行 printf("%d,",--(*p)); 先对p指向元素的值减一,后打印此值
第12行 printf("%d\n",*p); 打印p指向元素的值
(注:此题来源为苏小红《C语言程序设计(第3版)》 习题11.1)
附:关于表达式 (*p)++ 和 p++ 的不同含义的解释说明
(*p)++ 意为先取出p指向的值,后对取出值加1,p仍指向原来的储存单元;*p++ 则是先取出p指向的值,后将p的值加1,p不再指向原来的储存单元。