指针问题
#include "stdafx.h"#include "iostream.h"
void com(char str1[],char str2[])
{
char *p1,*p2;
p1=str1;
p2=str2;
for(;*p1!=0;p1++)
;
while(*p2!=0)
{
*p1=*p2;
p1++;
p2++;
}
*p1=0;
}
int main(int argc, char* argv[])
{
char str1="125374";
char str2="asd";
com(str1,str2);
cout<<str1<<endl;
return 0;
}
..........while循环中将p1++,p2++改为*p1++,*p2++为什么也对。。。。
补充,也就是为什么下面的也对
#include "stdafx.h"
#include "iostream.h"
void com(char str1[],char str2[])
{
char *p1,*p2;
p1=str1;
p2=str2;
for(;*p1!=0;p1++)
;
while(*p2!=0)
{
*p1=*p2;
*p1++;
*p2++;
}
*p1=0;
}
int main(int argc, char* argv[])
{
char str1="125374";
char str2="asd";
com(str1,str2);
cout<<str1<<endl;
return 0;
} ++的优先级大于*,*p1++相当于*(p1++),p1先自增,再取地址。作为单独的语句*p1++效果和p1++相同 楼上说的是错的,*p1++是先取值,然后再指针自加,因为不论是p1++还是*p1++都实现了指针的自加,
所以两种结果都是对的,但是第二种没必要,因为*P1的值这里你没有用到,所以不必取值。
ps:若换成(*p1)++结果就不对了哦~~~ 玩酷子弟lv 发表于 2012-5-15 16:43 static/image/common/back.gif
楼上说的是错的,*p1++是先取值,然后再指针自加,因为不论是p1++还是*p1++都实现了指针的自加,
所以两种 ...
谢谢你提出来,我犯了低级错误,差点误人子弟。*p1++相当于*(p1++),是先取地址,再指针自增 谢谢了。。。。。 = = ~符号的优先级问题。 LOCK 发表于 2012-5-15 11:31
补充,也就是为什么下面的也对
#include "stdafx.h"
#include "iostream.h"
*p1++等价于*(p1++),先取p1指向变量的内容,再p1+1,指针最后指向下一个元素;
p1++就是直接指针指向下一个元素;
从两个运算的最后结果来看,都是指向下一个元素。 HansonCPT 发表于 2017-6-19 21:32
*p1++等价于*(p1++),先取p1指向变量的内容,再p1+1,指针最后指向下一个元素;
p1++就是直接指针指向 ...
我怎么没看懂呢 *(p++)不应该是先p++然后取值么,为什么是先取地址地址,再指针自增呢? qq小小七 发表于 2017-6-21 10:38
我怎么没看懂呢 *(p++)不应该是先p++然后取值么,为什么是先取地址地址,再指针自增呢?
哦,知道了,确实是这样的 qq小小七 发表于 2017-6-21 10:41
哦,知道了,确实是这样的
一起进步,我是搜整个论坛关键字“指针”,看了论坛的关于指针的部分帖子,慢慢理解了指针的部分内容,还是有很多不解{:5_109:}
页:
[1]