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

#include <iostream>
#include <cstdio>
using namespace std;
char **suit(char *input,char sep,int *size)
{
char **s;
int m=0,n=0;
for(int i=0;i<*size;i++){
s[i]=(char *)malloc(sizeof(char)*strlen(input));
}
for(int j=0;j<strlen(input);j++)
{
if(input[j]!=sep)
{
s[m][n]=input[j];
n++;
}
else
{
m++;
n=0;
}
}
return s;
}

void main()
{
int i=3;
char *s="hello the wold";
char **a=suit(s,' ',&i);
for(int j=0;j<3;j++)
{
cout<<a[j]<<endl;
}
}

哪里错了?

[此贴子已经被作者于2006-6-21 9:42:27编辑过]

搜索更多相关主题的帖子: 指针 
2006-06-21 09:32
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 
我想输出
hello
the
world
2006-06-21 09:33
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

[CODE]#include <iostream>
#include <cstdio>
using namespace std;
char **suit(char *input,char sep,int *size)
{
char **s = (char **)malloc(sizeof(char*) * *size); //你下面用了s[i],所以你必须给s申请一个指针数组的空间
int m=0,n=0;
for(int i=0;i<*size;i++){
s[i]=(char *)malloc(sizeof(char)*strlen(input));
}
for(int j=0;j<strlen(input);j++)
{
if(input[j]!=sep)
{
s[m][n]=input[j];
n++;
}
else
{
s[m][n] = '\0'; //加入结束符
m++;
n=0;
}
}
s[m][n] = '\0'; //加入结束符
return s;
}
void main()
{
int i=3;
char *s="hello the world";
char **a=suit(s,' ',&i);
for(int j=0;j<3;j++)
{
cout<<a[j]<<endl;
}
//这里需要释放a
}[/CODE]
另外,你的suit里的算法还可以改进,不用申请那么多内存的


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-21 10:29
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 
以下是引用aogun在2006-6-21 10:29:23的发言:

[CODE]#include <iostream>
#include <cstdio>
using namespace std;
char **suit(char *input,char sep,int *size)
{
char **s = (char **)malloc(sizeof(char*) * *size); //你下面用了s[i],所以你必须给s申请一个指针数组的空间
int m=0,n=0;
for(int i=0;i<*size;i++){
s[i]=(char *)malloc(sizeof(char)*strlen(input));
}
for(int j=0;j<strlen(input);j++)
{
if(input[j]!=sep)
{
s[m][n]=input[j];
n++;
}
else
{
s[m][n] = '\0'; //加入结束符
m++;
n=0;
}
}
s[m][n] = '\0'; //加入结束符
return s;//为什么这里不要释放s呢?因为它是函数作用域?函数结束后自动销毁?
}
void main()
{
int i=3;
char *s="hello the world";
char **a=suit(s,' ',&i);
for(int j=0;j<3;j++)
{
cout<<a[j]<<endl;
}
delete a;//这里需要释放a。那这里呢?main结束后不会自动回收么?
}[/CODE]
另外,你的suit里的算法还可以改进,不用申请那么多内存的

2006-06-21 11:26
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
to wimphy:
//为什么这里不要释放s呢?因为它是函数作用域?函数结束后自动销毁?
这里没有销毁,也不是自动销毁,你返回的是指针,销毁以后返回的内容就没意义了。(char **a=suit(s,' ',&i);),这里把a定义为局部函数返回的2级指针,也就是s,
那么delete a;就是把a所指向的内存区域释放(同时也是s指向的地址)

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-21 11:57
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 

谢谢二位~~~

明白了

2006-06-21 12:30
快速回复:[求助]二级指针
数据加载中...
 
   



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

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