鱼C论坛

 找回密码
 立即注册
查看: 2583|回复: 10

指针问题

[复制链接]
发表于 2012-5-15 11:30:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[20]="125374";
char str2[10]="asd";
com(str1,str2);
cout<<str1<<endl;
return 0;
}
..........while循环中将p1++,p2++改为*p1++,*p2++为什么也对。。。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-15 11:31:48 | 显示全部楼层
补充,也就是为什么下面的也对
#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[20]="125374";
        char str2[10]="asd";
        com(str1,str2);
        cout<<str1<<endl;

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-15 12:14:47 | 显示全部楼层
++的优先级大于*,*p1++相当于*(p1++),p1先自增,再取地址。作为单独的语句*p1++效果和p1++相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-15 16:43:45 | 显示全部楼层
楼上说的是错的,*p1++是先取值,然后再指针自加,因为不论是p1++还是*p1++都实现了指针的自加,
所以两种结果都是对的,但是第二种没必要,因为*P1的值这里你没有用到,所以不必取值。
ps:若换成(*p1)++结果就不对了哦~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2012-5-15 17:58:23 | 显示全部楼层

谢谢你提出来,我犯了低级错误,差点误人子弟。*p1++相当于*(p1++),是先取地址,再指针自增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-15 21:36:29 | 显示全部楼层
谢谢了。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-17 08:47:09 | 显示全部楼层
= = ~符号的优先级问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2017-6-19 21:32:27 | 显示全部楼层
LOCK 发表于 2012-5-15 11:31
补充,也就是为什么下面的也对
#include "stdafx.h"
#include "iostream.h"

*p1++等价于*(p1++),先取p1指向变量的内容,再p1+1,指针最后指向下一个元素;
p1++就是直接指针指向下一个元素;
从两个运算的最后结果来看,都是指向下一个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 10:38:27 | 显示全部楼层
HansonCPT 发表于 2017-6-19 21:32
*p1++等价于*(p1++),先取p1指向变量的内容,再p1+1,指针最后指向下一个元素;
p1++就是直接指针指向 ...

我怎么没看懂呢 *(p++)不应该是先p++然后取值么,为什么是先取地址地址,再指针自增呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 10:41:26 | 显示全部楼层
qq小小七 发表于 2017-6-21 10:38
我怎么没看懂呢 *(p++)不应该是先p++然后取值么,为什么是先取地址地址,再指针自增呢?

哦,知道了,确实是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 22:03:27 | 显示全部楼层
qq小小七 发表于 2017-6-21 10:41
哦,知道了,确实是这样的

一起进步,我是搜整个论坛关键字“指针”,看了论坛的关于指针的部分帖子,慢慢理解了指针的部分内容,还是有很多不解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 12:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表