C语言里的输出问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:21:23
我的一个小程序
#include "stdio.h"
void shiliu(int n,int*a);
main(){
int i,n;
int a[20];
scanf ("%d",&n);
shiliu(n,a);
printf ("%d\n",a);
}
void shiliu(int n,int*a){
int i,m;
for (i=0;i<16;i++){
m=n%2;
n=n/2;
a[15-i]=m;
}
a[16]='\0';
}
将任一正整数(<32768)转换为 16 位二进制形式。
但是这样是得不到结果的
但是改成
#include "stdio.h"
void shiliu(int n,int*a);
main(){
int i,n;
int a[20];
scanf ("%d",&n);
shiliu(n,a);
for (i=0;i<16;i++)
printf ("%d",a[i]);
printf ("\n");
}
void shiliu(int n,int*a){
int i,m;
for (i=0;i<16;i++){
m=n%2;
n=n/2;
a[15-i]=m;
}
a[16]='\0';
} 
就能得到正确结果。
大家说我的第一种做法为什么是错的呢?
那第一种应该如何改正呢?
printf(&q

前一种方法你犯了一个概念上的错误,你使用int a[20]定义了一个数组,对于数组来说数组名就是这个数组的指针,而这个指针指向数组第一个元素的地址,printf("%d\n",a)只能打印出数组的第一个元素。而后一种方法你使用了循环,所以得出的是应该有的效果。