指针运算的问题
char a[10]="wisdom",*p;
p=&a[0];
*p++=*(p+2);
printf("*p=%c\n",*p);
system("pause");
请问第三行是什麽意思?
是先 *p=*(p+2) ,然后再 *p++ 吗?
为什麽印出来的结果是 *p=i 呢?
问题点数:20、回复次数:13Top
1 楼ENOUGH_XU(苦点,累点->没关系)回复于 2006-05-02 12:03:20 得分 0
其实就是把字符移位,把第二个移到第一个的位子上,依次做下去
先做*p=*(p+2),在把p的地址往后移一个Top
2 楼ENOUGH_XU(苦点,累点->没关系)回复于 2006-05-02 12:04:28 得分 0
是第3个移到第一个的位子上(个数不同于数组的序号)Top
3 楼NSR250()回复于 2006-05-02 12:09:19 得分 0
我明白了,
谢谢ENOUGH_XU大大的说明。Top
4 楼ENOUGH_XU(苦点,累点->没关系)回复于 2006-05-02 12:10:32 得分 0
你的程序只做了一次,你用s(p先指向w,再把第三个付给第一个)覆盖了w,然后再把指针从指向第一个的w变成了指向第二个,即i,所以输出的是i啊Top
5 楼NSR250()回复于 2006-05-02 12:14:30 得分 0
之前一直想不通,
难怪我把*(p+2)改成*(p+3)、*(p+4)...,
得到结果的一样是i,
经过大大您的说明,
我终于顿语了,
实在感谢。Top
6 楼ENOUGH_XU(苦点,累点->没关系)回复于 2006-05-02 12:15:35 得分 0
客气,我也是新手,大家相互学习.Top
7 楼heskyII(赫斯基)回复于 2006-05-02 12:20:31 得分 0
白痴,错了吧。
*p++=*(p+2);的意思是将P所指向的内容=(P+2)的值,即‘S’,然后再将指针P后移一位Top
8 楼awl005(忽然)回复于 2006-05-02 13:37:11 得分 0
*p++=*(p+2);
等价于:
*p=*(p+2);
p++;Top
9 楼Mypiger(深圳 step by step)回复于 2006-05-02 14:15:18 得分 0
错了!
p=&a[0]; //p指向a的头指针
*p++=*(p+2); //把p第三个位置的值赋值给p指向的位置,答案是 :sisdom
printf("*p=%c\n",*p); //输出%c 由于*p++(p++)所以输出第二个字符 iTop
10 楼baichi2()回复于 2006-05-02 14:20:40 得分 0
*p++=*(p+2);
分开来写是
*p=*(p+2);
p++;
这一步是把a[2]的值赋给a[0],而a[1]值并没有改变
printf("*p=%c\n",*p);
因为前面p++了,所以输出的是a[1]的值,a[1]一直是=i,没有改变
printf("%s",a);
看看就知道了Top
11 楼Mypiger(深圳 step by step)回复于 2006-05-02 14:29:01 得分 0
楼上的答案也是!
:)Top
12 楼shuaifujian()回复于 2006-05-02 14:40:09 得分 0
#include<iostream.h>
void main()
{
char a[10]="wisdom",*p;
p=a;
while(*p++)
{
cout<<"*p="<<*p<<endl;
*p=*(p+2);
}
cout<<"*p="<<*p<<endl;
}
Top
13 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-05-02 16:08:36 得分 0
基础知识~~~~~~~~~~~~~~~~~~~~~~~~~~
强烈建议楼主再好好看看运算符优先级Top




