| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 698 人关注过本帖
标题:指针里面的问题
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:11 
指针里面的问题

#include <iostream.h>//这个程序要把一个字符串里的单词提取并输出来!

char*nextword(char**pp);

void main()
{
char s[]="what is you name?";
char*ps=s;
do
cout<<nextword(&ps)<<endl;
while(*ps);
}

char*nextword(char**pp)
{
static char word[81];//不明白如果去掉static后便乱码显示?
//为什么这里的 char word[81]定义为"静态"的局部变量才能正确显示呢
while(**pp==' ')
(*pp)++;
char*pw=word;
while(**pp&&**pp!=' ')
*pw++=*(*pp)++;//*(*pp)++;如何看待呢?
*pw='\0';
return word;
}

大家指点指点

搜索更多相关主题的帖子: 指针 
2006-07-23 11:40
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我想是因为你的word是局部变量,所以在不用static时,就会出错,如果是static,那么这个栈内的内容还不会弹出,依然存在。所以才能输出被返回的内容。

至于*pw++=*(*pp)++;
相当于
*pw=**pp;
pw++;
(*pp)++;


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-23 11:58
摄政王:多尔滚
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2006-7-9
收藏
得分:0 
我想是因为你的word是局部变量,所以在不用static时,就会出错,如果是static,那么这个栈内的内容还不会弹出,依然存在。所以才能输出被返回的内容。

至于*pw++=*(*pp)++;
相当于
*pw=**pp;
pw++;
(*pp)++;

===========>
yun, static define variable in static access aera, is not stack

sorry, my Linux system has no chinese and my english is poor

19世纪是火车的时代,20世纪是汽车的时代,21世纪是网络的时代。有谁不同意?
2006-07-23 12:54
摄政王:多尔滚
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2006-7-9
收藏
得分:0 
area

19世纪是火车的时代,20世纪是汽车的时代,21世纪是网络的时代。有谁不同意?
2006-07-23 12:56
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用wfpb在2006-7-23 11:58:50的发言:

我想是因为你的word是局部变量,所以在不用static时,就会出错,如果是static,那么这个栈内的内容还不会弹出,依然存在。所以才能输出被返回的内容。

至于*pw++=*(*pp)++;
相当于
*pw=**pp;
pw++;
(*pp)++;

第三句似乎错了,应该是pp++,另外再补充一句,后加是在整个表达式完成后再进行指针自加


c++/C + 汇编 = 天下无敌
2006-07-23 13:01
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
哦,是这样啊,静态访问区,知道了,我对这不是很清楚,只是知道不会因为局部变量而被释放,所以说错了也请原谅。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-23 13:02
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 
static char word[81];

这样会不会内存泄露啊?
2006-07-23 13:03
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
不会的,因为不是动态分配内存,所以程序在执行完main函数后会自动释放内存,如果是用new分配的就要程序员手动释放

c++/C + 汇编 = 天下无敌
2006-07-23 13:04
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
to anthony634:
不会,他在很多时候相当于全局变量。

to 热情依然:
但是()改变优先级啊。

就好比:
int i=10;
int *p=&i;
(*p)++;
cout<<p<<endl;
输出的是11;

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-23 13:07
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

不会改变优先级的,不要给括号所迷茫,关于这个问题你可以查看<<C++ primer>>


c++/C + 汇编 = 天下无敌
2006-07-23 13:11
快速回复:指针里面的问题
数据加载中...
 
   



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

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