首页 > 试题广场 >

请先分析说明表达式(*p)++和*p++的不同含义,然后写出

[问答题]

请先分析说明表达式(*p++*p++的不同含义,然后写出下面程序的运行结果。

#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;
}


第一个(*p)++由于括号的优先级是最高的,首先取指针p指向当前地址的值,如设a[] = {1, 2, 3, 4, 5}; *p = a;那么先执行*p=a[0]=1;printf("%d\n", (*p)++);则输出的是*p的值,也就是1,然后再*p=*p+1,此时*p指向了a[0]的下一个单元a[2]。第二个*p++没有括号后,该运算从右向左结合也就是先执行p++,再取p指向的内存单元的值,也就是*p;
程序运行结果:
1,2,2,3,3,0,0
编辑于 2019-12-01 22:47:13 回复(0)
*和后++优先级相同,都是从右向左结合,由于后++的属性,不管有没有括号,都是先执行*p,然后执行p++
发表于 2019-12-03 00:20:54 回复(0)