10进制转换十六进制

来源:百度知道 编辑:UC知道 时间:2024/05/16 14:55:52
还有一些函数 就只说我不懂的
typedef srtuck
{
datatype1 data[maxsize];
int top;
}seqstack;
/*顺序栈初始化操作函数*/
void initstack(seqstack *s)
{
int i;
for(i=0;i<maxsize;i++)
s->data[i]='\0';
s->top=0;
}
/*转换成十六进制,函数*/
void d_to_h(unsigned x)
{
int y;
char ch;
seqstack stack,*s
s=&stack;
initstack(s);
push(s,'#');
while(x!=0)
{ y=x%16;
if(y<10)
push(s,y)
else
{ switch(y)
{ casr 10 :push(s,'A');break;
casr 11 :push(s,'B');break;
casr 12 :push(s,'C');break;
casr 13 :push(s,'D');break;
casr 14 :push(s,'E');break;
casr 15 :push(s,'F');
}
}
x=x/16;
}
while((ch=gettop(

seqstack stack,*s;
//产生两个实例?还是只是声明的?
//seqstack stach;告诉系统 分配内存空间给stack变量 ,seqstack *s;告诉系统 分配一个指针变量 s,该变量指向seqstack类型
s=&stack;
//s已经是指向seqstack的地址了,&stack也属于seqstack类型的地址 不知s=&stack;是何目的。
//上一句执行完毕后 s还是一个野指针,它并没有指向确定的内存单元,
//s=&stack; 的目的是使 s指向系统为stack变量分配的空间,即 s指向seqstack类型的变量stack的地址
initstack(s); //直接seqstack *s;然后initstack(*s);这样行不行?
//sorry,不行。因为这样的话s是一个野指针。对野指针进行赋值操作会引起非法错误。
//关于野指针,你可以参考相关书籍。
//要省懒的话可以写成如下的形式:
//
//seqstack stack, *s=&stack;
//initstack(s);