野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23372|回复: 4

itoa函数求指点

[复制链接]
发表于 2021-8-18 10:49:22 | 显示全部楼层 |阅读模式
static char *itoa(int value, char *string, int radix)
{
        int     i, d;
        int     flag = 0;
        char    *ptr = string; //这一句是将string的地址当做ptr指向的地址中的内容吗?
       

        if (radix != 10)
        {
            *ptr = 0;   //这个将地址中的内容赋值0.是不是就是将string地址 赋值0  ?
            return string;
        }
       
        if (!value)
        {
            *ptr++ = 0x30;///这个是什么意思?
            *ptr = 0;//加完后清零吗?
            return string;
        }
、、、、、、、、
}

回复

使用道具 举报

发表于 2021-8-19 02:06:57 | 显示全部楼层
      char    *ptr = string; //这一句是将string的地址当做ptr指向的地址中的内容吗?
指针在定义和赋值的时候*号的作用是不一样的。char* ptr只是定义ptr是一个指针,同时赋值= string是把string的值赋给ptr,因为string同样是在形参中定义的一个指针,而它的值是一个指向某个内存块的首地址。*号是取值,取的不是指针的值,而是指针所指向的内存块存放的值。
那么就明白了,因为ptr和string的值相同,所以他们指向同一块内存,所以*ptr将这块内存赋值为0,*string同样也等于0。
*ptr++ = 0x30;所以*ptr = 0x30 + 1 。0x30中0x表示是一个二进制数,就是0011 0000,加1就是0011 0001。
回复 支持 反对

使用道具 举报

发表于 2021-8-19 02:27:48 | 显示全部楼层
还补充一下,你这个itoa函数命名不美,跟系统函数名字一样了。
回复 支持 反对

使用道具 举报

发表于 2021-8-19 02:55:51 | 显示全部楼层
*ptr++ = 0x30;这个刚看了下,说错了。++优先级比*高,但是后置++,先是*ptr = 0x30.然后ptr+1.特此更正。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 14:17:43 | 显示全部楼层
TOTO 发表于 2021-8-19 02:55
*ptr++ = 0x30;这个刚看了下,说错了。++优先级比*高,但是后置++,先是*ptr = 0x30.然后ptr+1.特此更正。 ...

感谢详细的指导
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 08:59 , Processed in 0.035581 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表