c++:老师也不能解释的程序

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:16:03
#include<iostream.h>
void main(){
int a[3],k=0;
for(int i=0;i<3;i++)a[i]=k++;
int * p=a;
cout<<a<<'\n'<<p<<'\n'<<*p++<<'\n'<<p<<'\n'<<*p<<endl;
}
本应该输出数组a的地址,指针值,*p的内容,原指针下一位的值,再取内容。可是。。。。
奇怪啊,老师只说怎样改,也不知道怎样解释
dx们帮帮忙

这个程序没有问题!

你以为cout是从左向右处理的,先输出a的地址,在输出指针值...
而实际上cout是从右向左处理的,处理与输出是个入栈出栈的关系

这个程序有问题么?

#include<iostream.h>
void main(){
int a[3],k=0;
for(int i=0;i<3;i++)a[i]=k++;
int *p=a;
cout<<a<<'\n'<<p<<'\n';
cout<<*p++<<'\n';
cout<<p<<'\n'<<*p<<endl;
}
需要改成这个样子
关于自增运算符的执行顺序,每个编译器是不一样的
所以我建议每个自增运算都单独写一句出来

上cout是从右向左处理的,先进栈后出,按指定顺序输出的话用printf函数。