c语言scanf函数

img

img


这是为什么呢

你是问编译为什么不报错吗
因为编译器只管类型正确就行了,它不管数据正确不正确,也管不了
i是个int,&i是i的地址,也是个int,类型一致,符合函数定义

因为scanf()原型声明是

int scanf( const char *format, ...);

...表明它可以接受任意数目参数,而编译器无法对除第一个参数之外的所有参数进行类型检查。这就需要程序员在写程序时确保format中的格式要求和传入参数的类型匹配

@GX 是对的。

       int i;
        double m;

        scanf("%d", i);
        scanf("%d", "haha");
        scanf("%d", m);

编译都不会报错

然而,用最新编译器会报错的。