| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖
标题:字符串的问题,各位路过的帮忙指点指点!
只看楼主 加入收藏
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:8 
字符串的问题,各位路过的帮忙指点指点!
void copy(char *s1,char *s2)
{
    while((*s1++=*s2++)!='\0');
}
main()
{
    char p1[]="Yes",p2[]="No";
    copy(p1,p2);
    printf("%s\n",p1);
}

这里的main函数中的p1,p2为什么不能改成指针*p1,*p2呢?
搜索更多相关主题的帖子: 字符串 
2011-03-28 17:58
海之舟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:43
专家分:150
注 册:2011-1-8
收藏
得分:2 
因为p1和p2已经是指针了,是常量指针,*p1是代表p1[0],*p2是代表p2[0].
2011-03-28 18:47
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
void copy(char *s1,char *s2)
{
    while((*s1++=*s2++)!='\0');
}
main()
{
    char p1[]="Yes",p2[]="No";
    copy(p1,p2);
    printf("%s\n",p1);
}        我想楼主是问p1[]为什么不能改成*p1!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-03-28 18:54
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:8 
楼主这题问的好。
这一题,个人观点:字符串数组字符串指针 它们两引用的概念你没搞清楚。
1.按你用缺省字符数组来引用"yes"和"no"字符串是可行的。
问题:这里的main函数中的p1,p2为什么不能改成指针*p1,*p2呢?
解决:因为当p1,p2作为字符串指针来引用的时候,.
    错误1. 子函数copy形参不能用指针来承接指针变量地址.,我们知道,只有指向指针的指针,才能引用.所以这里应该使用 **s1,**s2来充当形参变量.
    错误2. 你要了解,字符数组是可以取内容和改变内容的,而字符串指针它只是指向数组的指针懂吗!它仅仅只是指向这串字符串的首地址!,
所以在这个子函数中,你可以直接改变交换的指针指向,具体思路,如下代码:

#include "stdio.h"
void copy(char **s1,char **s2)
{
    //用一级指针来承接,因为这里如果再用指向指针的指针来引用,会导致值重复,就好比:指针间接改变变量值的关系一样。
    char *sp;
    sp=*s1;
    *s1=*s2;
    *s2=sp;
}
main()
{
    char *p1="Yes",*p2="No";
    copy(&p1,&p2);
    printf("p1=%s\np2=%s\n ",p1,p2);
}
2011-03-28 19:24
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:0 
回复 4楼 默默学习
真的谢谢你了,两个问题你都回答了,虽然这个问题我还不是太明白!这位老师,能加个Q么,如果你有空的话,我还想再请教请教你,我的Q是736598653!

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-03-28 20:18
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
愧不敢当,我也是个学生,昨天才考完的机试.
有问题就来群一起学习吧: 21758035
2011-03-28 20:27
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
以下是引用默默学习在2011-3-28 19:24:17的发言:

楼主这题问的好。
这一题,个人观点:字符串数组 与 字符串指针 它们两引用的概念你没搞清楚。
1.按你用缺省字符数组来引用"yes"和"no"字符串是可行的。
问题:这里的main函数中的p1,p2为什么不能改成指针*p1,*p2呢?
解决:因为当p1,p2作为字符串指针来引用的时候,.
    错误1. 子函数copy形参不能用指针来承接指针变量地址.,我们知道,只有指向指针的指针,才能引用.所以这里应该使用 **s1,**s2来充当形参变量.
    错误2. 你要了解,字符数组是可以取内容和改变内容的,而字符串指针它只是指向数组的指针懂吗!它仅仅只是指向这串字符串的首地址!,
所以在这个子函数中,你可以直接改变交换的指针指向,具体思路,如下代码:

#include "stdio.h"
void copy(char **s1,char **s2)
{
    //用一级指针来承接,因为这里如果再用指向指针的指针来引用,会导致值重复,就好比:指针间接改变变量值的关系一样。
    char *sp;
    sp=*s1;
    *s1=*s2;
    *s2=sp;
}
main()
{
    char *p1="Yes",*p2="No";
    copy(&p1,&p2);
    printf("p1=%s\np2=%s\n ",p1,p2);
}
我想请教一下这句:子函数copy形参不能用指针来承接指针变量地址.,我们知道,只有指向指针的指针,才能引用.         就是为什么子函数copy形参不能用指针来承接指针变量地址,为什么只有指向指针的指针才能引用!    刚学到指针,所以对这种概念还是比较模糊!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-03-28 22:07
hiwo
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-10-16
收藏
得分:0 
mark
2011-03-30 22:27
绯苍幻想曲
Rank: 2
等 级:论坛游民
帖 子:34
专家分:49
注 册:2010-11-29
收藏
得分:0 
其实我想说如果你把P1[],P2[]换成指针的话语法是没有错误的,COPY函数的形参也不用做任何改动,没必要改成指向指针的指针。传递形式参数时也没必要写&p1和&p2,直接写成p1,p2就可以把参数传递过去了!因为p1,p2已经代表字符串的首地址了。
程序代码:
void copy(char *s1,char *s2)
{
    while((*s1++=*s2++)!='\0');
}
main()
{
    char *p1="Yes",*p2="No";
    copy(p1,p2);
    printf("%s\n",p1);
    return 0;
}
2011-03-30 23:29
快速回复:字符串的问题,各位路过的帮忙指点指点!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012197 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved