考点:
函数printf()的执行机制:参数按照从右至左的顺序入栈,在调用时出栈;
考察运算符“++”在变量之前、变量之后的运算机制,即是先赋值/还是先自增
*(p++)、*(++p)、*(p+1)之间的区别
后面两项主要是考察:取值运算与自增运算的优先级;(自增运算>取值运算)
*p++与*(p++)——>没有区别
*++p与*(++p)——>没有区别
#include
void fc1(int arr[])
{
//分别输出,预计输出6,7;实际输出6,7
int *p = arr;
printf("---fc1---\n");
printf("%d", *p);
printf("%d\n",*(++p));
}
void fc2(int arr[])
{
//同时输出,预计输出7,7;实际输出6,7
printf("---fc2---\n");
int *p = arr;
printf("%d,%d\n",*p, *(++p));
}
void fc3(int arr[])
{
//测试++p,与p++,预计输出6,6;实际输出6,6
int *p = arr;
printf("---fc3---\n");
printf("%d", *p);
printf("%d\n",*(p++));
}
void fc4(int arr[])
{
//同时输出测试二,预计输出6,6,实际输出6,6
int *p = arr;
printf("---fc4---\n");
printf("%d,%d\n", *p,*(p++));
}
void fc5(int arr[])
{
//预计输出6,7,;实际输出6,7
int *p=arr;
printf("---fc5---\n");
printf("%d %d",*p,*(p+1));
}
void fc6(int arr[])
{
//区分*++p与*(++p);//arr2[]={1,3,5,7,9},预计输出1,3;实际输出1,3
int *p=arr;
printf("---fc6---\n");
printf("%d %d",*p,*++p);
}
void fc7(int arr[])
{
//区分*p++与*(p++);//arr2[]={1,3,5,7,9}预计输出1,2;实际输出1,1
//考察取值运算符*与自增运算符++的优先级
int *p=arr;
printf("---fc7---\n");
printf("%d %d",*p,*p++);
//解析:++的优先级高于*,所以先做指针自增预算(p++预算过程为:p=p;p++,所以指针p还是指向的数组中第一个元素),在做取值运算;
}
int main()
{
int arr[] = {6,7,8,9,10},arr2[]={1,3,5,7,9};
fc1(arr);
fc2(arr);
fc3(arr);
fc4(arr);
fc5(arr);
fc6(arr2);
fc7(arr2);
return 0;
}
以下为代码段的实际运行结果:
标题