| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1505 人关注过本帖
标题:求助C++关于指针赋值的问题!
只看楼主 加入收藏
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
结帖率:95.12%
收藏
已结贴  问题点数:5 回复次数:14 
求助C++关于指针赋值的问题!
char *d,char *s;

while(( *d ++ = *s ++ ) != '\0' )
;


这是书上的原语句,意思是把指针s所指字符赋给目标指针d所指的内容,接着将s和d自增1指向了下一个字符,然后判断是否到达了字符串的结尾





我知道d=s的意思是d指向s,也知道*d==*s(假设相等的情况下可以这样写),但 *d ++ = *s ++ 这样的赋值就不太看得懂了,*是取内容运算符,如果*d++取得的值是2,*s++取得的值3,那么就成了2=3(3赋给2)??

大侠帮忙看看哦,



搜索更多相关主题的帖子: 指针 赋值 
2010-02-02 18:00
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
收藏
得分:1 
发表一下个人观点:
while((*d++=*s++)!='\0')
;
等价于
*(d+1)=*(s+1);//把s的首字符付给d的首字符
while(*(d+1)!='\0')
{
    *s++;
    *d++;
    *d=*s;
}

[ 本帖最后由 gyx8899 于 2010-2-2 22:14 编辑 ]
2010-02-02 18:22
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
收藏
得分:0 
先谢过了,


*d=*s;//把s的首字符付给d的首字符



这里的*号到底表示什么哦,把s的首字符付给d的首字符应该是d=s啊,为什么还要加*号呢
2010-02-02 18:37
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:1 
*d++;
++是对d,而不是*d;你认真想下就能明白了

迭代的是人,递归的是神。
2010-02-02 19:37
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
++的优先级高于*

迭代的是人,递归的是神。
2010-02-02 19:39
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
收藏
得分:1 
回复 3楼 fyz520
d=s;
是传递地址。实际上指:指针d、s指向同一个字符串,即都是第一个字符的地址。
2010-02-02 22:17
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
收藏
得分:0 
谢谢各位,,,这里的*d=*s,是不是可以理解为引用存储单元的意思呢

比如

int i,j, *d,*s;
    d=&i;
    s=&j;
    *d=*s   // 是不是可以理解为i=j,因为*d就等于i,*s等于j
2010-02-03 09:18
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
可以这么理解。不过我怎么感觉兜这么大个圈子反而理解着更费劲了?
不过多想想是好事,指针是个比较重要的课题。花些力气是值得的。
2010-02-03 23:01
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
收藏
得分:0 
恩,想要彻底搞懂指针是件不容易的事哈,
2010-02-04 10:00
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:1 
回复 楼主 fyz520
我谈谈我的观点,希望对你有帮助。
我们在描述指针的时候都是说:指向某类型变量的指针。比如:
int ia = 2;
int *pi = &ia;
上面的语句就是指,ia是整型变量,pi是指向整型变量的指针,这个指针指向ia。换句话说就是pi指向了一个存储单元,这个存储单元的地址就是pi的值,该存储单元里存着一个数值2。

有了上面的语句,我们在用*pi时,就是把pi所指向的那个存储单元里的数值拿出来,就像楼主你所说的:*是取内容的。但是,*pi是一个变量,这个变量的值是2,在你的这个例子中,*d  = *s  是指把s所指的变量的值赋给d所指的变量,是用一个变量的值给另一个变量赋值,并不是你所说的把3赋给2。指针是指向变量,而不是指向一个值。

有时候我们也会有这样的疑惑,就是,我们一会说pi指向了ia,一会又说pi指向了一个存储单元,到底哪个说法对呢?其实这两种说法都对,那么我们就很容易想到,存储单元里存储了变量的名字ia。事实上这样想是错误的,存储单元里存的只是这个变量的值,存储单元的地址才相当于名字ia,因为程序经过编译后将变量名转换为了变量的地址。
2010-02-04 12:27
快速回复:求助C++关于指针赋值的问题!
数据加载中...
 
   



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

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