指针基础++p p++

来源:百度知道 编辑:UC知道 时间:2024/06/05 14:38:46
void main()
{
int a[5]={1,3,5,7,9},*p;
p=a;
A;
}
---------------------------------
1,A为cout<<*p;
cout<<*p++;
cout<<*(++p)
------------------------------
2,A为cout<<*p<<*p;
cout<<*p++<<*p++;
cout<<*(++p)<<*(++p);
------------------------------
3,A为cout<<*p<<*p++<<*(++p);
------------------------------
4,A为cout<<*p<<*p<<*p++<<*p++<<*(++p)<<*(++p);
-----------------------------
他们的结果分别为多少???
请详细注释并解释其理由。
(我知道结果肯定各不相同)
我是在visual c++ 6.0版上运行过的答案
结果分别为:115 ;113197;533;997553。
请给出正确的详细解释!!!

解释一下吧 p其实就是指向数组首地址的指针
数组指针可以进行加减运算,但要注意越界问题,每次操作是左移或右移n个,比如p++就是p[0+1]的地址,再有就是++p和p++的区别,p++是本次运算为p,然后以后就是p+1,++p就是本次运算就是p+1,还有结合性问题,最基本的就是结合从左至右结合最多的运算符,比如*p++就是(*p)++
现在说答案吧
1,1 1 3
2,1 1 1 2 3 5
3,1 1 1 3
4,1 1 1 2 3 5
注:1234题之间没有影响

1、分别输出:115;
说明:第一个应该知道了吧!第二个是分成两个步骤:*p,p++;打印完后,p指向第二个元素了;第三个是先p++,然后打印,也就是p指向第三个元素了。
2、输出:111379;
说明:第一个没有问题!第二个和上一题也差不多;第三个同样可以用上面的解释。
3、输出:115;
说明:就是第一题吧!
4、输出:111379;
就是第二题吧!
说明:略!

其实就是考查的前缀和后缀,++是前缀的时候,先执行++,然后执行那条语句,后缀的时候,就是先执行那条语句,然后执行++操作!

void main()
{
int a[5]={1,3,5,7,9},*p;
p=a;
A;
}
---------------------------------
1,A为cout<<*p; // 打出*p 即 1
cout<<*p++; //打出 *p 即1 后p指向 3
cout<<*(++p)//p后移指向5,再打印,打出 5
所以结果是 1 3 5
------------------------------
2,A为cout<<*p<<*p; 打出 1 1

cout<<*p++<<*p++;
/*等效于 cout<<*p<<*