求解一道C语言的题目!!!谢谢了!

程序如下:任意读入一个十进制正整数,将其转换成二至十六任意进制的字符串。voidtran(intm,intr,charstr[],int*n){charsb[]="012... 程序如下:
任意读入一个十进制正整数,将其转换成二至十六任意进制的字符串。
void tran(int m,int r,char str[],int *n)
{char sb[]="0123456789ABCDEF"; int i=0,g;
do{g=m%r;
str[i]=sb[g];
m=m/r;
i++;
}while(m!=0);
*n=i;
}
main()
{int x,r0; /*r0为进制基数*/
int i,n; /*n中存放生成序列的元素个数*/
char a[50];
scanf("%d%d",&x,&r0);
if(x>0&&r0>=2&&r0<=16)
{tran(x,r0,a,&n);
for(i=n-1;i>=0;i--) printf("%c",a[i]);
printf("\n"); }
else exit(0);
}
倒数第五行的tran函数中,为什么a不能用a[]或a[50]来代替呢?在定义tran函数中,str[]明明定义的是一个数组,为什么到了这里却要写成数组名?谢谢了!很抱歉我没有悬赏。
展开
 我来答
White_MouseYBZ
2012-01-05 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6390万
展开全部
你对数组与数组名是怎么理解的?引用数组就是要写数组名,不能写成员啊。char str[]告诉编译器,str[]是个char型数组(当然写char *str也无妨,效果一样),引用它就得写与str对应的变量。str这时是数组str的名字,也是它的首地址,是一个指向这个数组的指针常量(既不能++、--,也不能再让它指向别处)。a是char形数组名,性质和上面的分析完全一样,写成a[]和a[50],前者是非法的,后者是a数组的第51个元素,二者都不是tran函数的形参所要求的char型数组(或指针)。
wrist664
2012-01-05 · TA获得超过103个赞
知道答主
回答量:197
采纳率:0%
帮助的人:137万
展开全部
//stdio,不是stidio sub(int *p,int n,int k);//这里需要先加上函数声明 main(){ int t=0; sub(&t,20,1);//这里最后少一个分号 printf("
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
炜炜ing
2012-01-05 · TA获得超过114个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:61.2万
展开全部
在定义中,char str[],int *n 是一起的,表示这里需要接收一个数组首地址(str),和它的长度(n),因此在使用tran时,需要输入a这表示a[50]的首地址,而a[ ]没有含义,a[50]在定义之后使用表示的是a数组第51个元素存的数值,因为数组从0开始,所以a[50]存的是乱码(最后一个元素是a[49]。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逸明鲸人
2012-01-05 · TA获得超过867个赞
知道小有建树答主
回答量:409
采纳率:100%
帮助的人:431万
展开全部
此处a实际为数组a的首地址 故不可用其他替代
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fuli7430
2012-01-05
知道答主
回答量:23
采纳率:0%
帮助的人:3.3万
展开全部
这个是函数的调用,tran(x,r0,a,&n);这个是实参,实参中,要求写数组名。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式