| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 699 人关注过本帖
标题:qiu jie
只看楼主 加入收藏
jxnu55555
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-3-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
qiu jie
void Dto16(int m)
{   seqstack s;            //定义顺序栈
    init(&s);
    printf("十进制数%u对应的十六进制数是:",m);
    char*p="0123456789ABCDEF";
    while (m)
    {
        push(&s,p[m%16]);
        m/=16;
    }
    while (!empty(&s))
                putchar(pop(&s) );
    printf("\n");
}
这是用C语言写的将十进制转为十六进制的函数,求老师解读char*p="0123456789ABCDEF";和push(&s,p[m%16]);这两条语句。
搜索更多相关主题的帖子: 十六进制 十进制 C语言 
2017-04-04 10:50
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:10 
p[m%16]

p偏移m%16,然后取该地址的值,等同于 *( p + m % 16 );

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-04 11:38
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:10 
    你问这个问题的话,renkejun1942的回答你肯定不满意,(哈哈,作为一个新手,我就是那么理解你!!!)

char*p="0123456789ABCDEF"的意思是创建一个字符串"0123456789ABCDEF",并且将字符串的第一个字符的指针赋值给字符指针变量p(当然,一旦赋值,就变成常量字符串,也就是说这个字符串你只能读,不能改了)
等价于char p[]="0123456789ABCDEF"。

push(&s,p[m%16])的意思是,将p[m%16]这个东西压入堆栈s,p[m%16]是什么东西呢?就是先对m除以16取余数,在将这个余数做为一个偏移量,类似于数组的取值操作在字符串中取出相应的字符。比如余数是2,p[2]='2',明白了么。然后就是为什么要取16的余数呢,就是要计算m转成十六进制的每一位。

    好,你可以结贴给分了。新手共勉!

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-04-04 16:20
快速回复:qiu jie
数据加载中...
 
   



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

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