| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:指向字符串的指针问题
只看楼主 加入收藏
不懂C编程
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2009-10-17
结帖率:100%
收藏
 问题点数:0 回复次数:12 
指向字符串的指针问题
#include"stdio.h"
void main()
{
 char str[]="xyz",*ps=str;
 while(*ps)               /*这句话是什么意思?*/
  ps++;
 for(ps--;ps-str>=0;ps--)
  puts(ps);
}
这个程序基本上都不懂,麻烦高手详细的解释一下程序。
最好逐句解释下。谢谢!
搜索更多相关主题的帖子: 字符 指针 
2009-10-17 11:57
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
你问的那句话的意思是当ps中的数组元素(即字符)不为字符串结束标记时继续循环,否则结束循环,因为\0对应0,while语句理解为逻辑假。
至于整个程序都不理解,我只能说你还是先仔细看书吧= =!
如果哪位高人有此热心来解答,欢迎跟帖:(ps:一般m456m654和user会回答
天空一声响,楼下闪亮登场...
        oooooo
        o    o
        o    o
     oooo    oooo
      o        o
       o      o
        o    o
          oo  

[ 本帖最后由 pgy 于 2009-10-17 12:13 编辑 ]

我可好玩啦...不信你玩玩^_^
2009-10-17 12:11
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
不能叫 反序 不知道叫什么。。。

while(*ps) 要从这里看

str[]="xyz",*ps=str

也就是 str 数组 是 xyz\0

那么剩下的你就好理解了:
while(*ps)
  ps++;

至于循环当中ps-str>=0 ,这个表达式是表示地址的加减

[ 本帖最后由 福尔摩斯 于 2009-10-17 12:53 编辑 ]

自我放逐。。。
2009-10-17 12:14
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
看来我是老了,越描越黑

我重新说下吧,你们当3楼我说的话放P

char str[]="xyz",*ps=str;
while(*ps)
  ps++;
for(ps--;ps-str>=0;ps--)
  puts(ps);

首先 str 数组 表示的 是 "xyz\0"
ps 是指向 str 的指针

str 的值 是 str 的首地址 ; ps的值 也是 str的首地址

while(*ps)
  ps++;  

只要ps 的地址不是 '\0',那么这个循环继续;这个循环结束时候它的位置 是在 '\0'处(因为 *ps 非真)


for(ps--;ps-str>=0;ps--)  
  puts(ps);

循环一开始 ,ps地址倒退1位,也就是 到了 'z', 也可以表示为 str + 2 ,那么 ps - str = str+2 -str = 2 > 0
所以输出 "z\0"
这次循环末,ps再次退1 位 位置是 'y' ,也就是 str + 1,剩下的就好解释了
……

至于程序最后,当 ps 退到 str 左边,也就是 str - 1 ,那么判断语句 就是 ps -str = str-1 -str = -1 >=0 这个条件非真,故跳出循环

PS:一直在想这个叫什么输出,开始叫 反序;但不能这么叫 因为 反序 表示的是 zyx;
能不能叫 “移 顺输出”

自我放逐。。。
2009-10-17 13:14
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 4楼 福尔摩斯
在3楼放了个“惊天地泣鬼神”的》...

4楼又讲的好复杂,真有耐性

我可好玩啦...不信你玩玩^_^
2009-10-18 11:55
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
你哪里没明白

自我放逐。。。
2009-10-18 12:15
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
我哪里都明白我懒得为楼主一点点的解释,解释个大概就OK,细节想让他自己去理解。
你倒是解释的还真清楚

我可好玩啦...不信你玩玩^_^
2009-10-18 13:33
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
作为一个指向字符串的指针,如果指针+1或者+n,是否输出的就是这个指针对应的字符后面的一整串字符??求解啊、
2009-10-18 13:58
谛舞皓
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-17
收藏
得分:0 
回复 4楼 福尔摩斯
问一下
循环一开始 ,ps地址倒退1位,也就是 到了 'z'
这句话是怎么回事。
谢谢
2009-10-18 14:08
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
str 数组 表示的 是 "xyz\0"

while(*ps)  
  ps++;  这个循环结束时候它的位置 是在 '\0'处(因为 *ps 非真)

*ps = '\0'


for(ps--;ps-str>=0;ps--)   
  puts(ps);  

它在fpr循环中值更改了,ps地址倒退1位,也就是 到了 'z'

自我放逐。。。
2009-10-18 16:39
快速回复:指向字符串的指针问题
数据加载中...
 
   



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

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