德育基地:C语言:关于指针哦``

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 16:52:50
有两个问题,先看下程序:
#include<stdio.h>
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d %d\n",*p,(*q)++);
}
------
第一个问题:
为什么教程的运行结果是:
2 2
3 2
而我的运行结果(在VC6。0上运行)是:
2 2
2 2

----------
第二个问题:
printf("%d %d\n",*p++,*(q++));
输出的为什么是:2 2 ?
q++就指向下一个单元了,怎么还能用*q取值?
回复firedragon8 :我真笨,还是看不懂

#include<stdio.h>
#include<iostream>
using namespace std;
void main()
{
int a=2,*p=&a,*q=&a;
cout<<*p++<<" "<<*(q++)<<endl;
p=&a;q=&a;
cout<<*p<<" "<<(*q)++;
// printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
// printf("%d %d\n",*p,(*q)++);
int i=0;
cin>>i;
}
这样结果就是正确的了,因为printf输出流处理的问题,它处理*p++是*(p++),而++是后缀处理,也就是先打印(printf)再p++指向下一单元,所以结果这样,
cout处理是(*p)++。
多做题,多看书,慢慢就懂了,刚开始学就这样,很正常啊。

问大挺好