用做printf的时候,会根据格式字符串做转换 比如 printf(“%d”,a); 等效于 printf(“%d”,(int)a);这个是可以混用的,用错了关系也不大,除非很极端的情况,输出都不会错。但是scanf中不能用错。 比如说short a;scanf("%d", &a);a是short只有2个字节的空间, 用%d scanf会写四个字节,这个就越界了。