C语言题目,为什么
发布网友
发布时间:2023-05-20 22:52
我来回答
共2个回答
热心网友
时间:2024-01-17 05:29
首先要知道一开始p指向数组a的第一个元素a[0],也就是1.
printf("%d\n",*++p);
由于++符号在p前面,所以先执行移动指针操作,p指向数组第二个元素的地址a[1],然后解除引用,就是2.
printf("%d\n",*p++);
++在p后面,先解除引用输出,也就数组a的第二个元素2,然后让指针p移向下一个地址a[2].
printf("%d\n", (*p)++);
括号操作符优先于单目运算符++,先解除引用输出p指向地址的值也就是a[2]=3.然后p指针后移。指向a[3]。
printf("%d\n",++*p);
首先对指针p解除引用,*p的值为a[3]=4,然后执行++操作,++4=5.所以输出5.
希望对你有用~
热心网友
时间:2024-01-17 05:29
int main(){
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
return 0;
}
Output:
3,1,1
5,4,5
7,7,9
1,1,1
4,2,2