引用改指针的问题,大神请进

flying_music 2016-05-11 10:48:37
自己实现了一个iToa()函数,实现整型数转换为字符串,代码如下

#include <iostream>
static void do_iToa(int i, char* &a)
{
//功能:将整形数字转换为字符串
//说明:要求字符串内存已分配
// 传引用以保证递归退出时指针正确偏移
if(i < 0){
*a = '-';
do_iToa(-1*i, ++a);
return;
}
if(i == 0){
return;
}
else{
char tmp_c = i%10 + '0';
do_iToa(i/10, a);
*a = tmp_c;
a++;
}
}
void iToa(int i, char* a)
{
//功能:将整型数转换为字符串
//说明:调用递归子函数完成转换,添加'\0'
// 传值以保证实参指针不发生变化
// 负责指针非空判断
if(a==NULL){
return;
}
do_iToa(i, a);
*a = '\0';
}

int main()
{
//itoa()测试场景
char *c = new char[10];
int a = -1234;
iToa(a, c);
printf("%s\n", c);
delete[] c;
system("pause");
return 0;
}

如代码所示,没有使用一般的临时字符串再翻转的方法,而是采用了递归
问题:
1. 怎么把这个引用的程序改为二级指针实现呢?我改了半天没成功啊
2. 有必要使用递归吗,是否华而不实啊
...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
纹枰老妖 2016-05-11
  • 打赏
  • 举报
回复
实现方法挺好,递归就递归了,没有什么华而不实的说法。 您的二级指针指的是**p这种形式吗?是的话,敢问您为何非要改成二级指针呢?
lm_whales 2016-05-11
  • 打赏
  • 举报
回复
没有必要递归, 不过确实没法事先知道生成的字符串长度 因此,递归,或者 转换后,翻转是更好的方法。 指针引用改成 指针的指针确实比较简单 但是需要注意一些细节, p= ----> *p= *p= ---->**p= *(p+i)= ---> *(*p+i)= p[i]= ----> (*p)[i] = 等等。。。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧