c/c++开发分享printf太聪明了从char到int?

为什么以下电话:

printf("%d %d", 'a', 'b'); 

导致“正确” 97 98值? %d表示函数必须读取4个字节的数据,而printf不能告诉接收到的参数的类型(格式字符串除外),为什么不打印数字|a||b||junk||junk|

提前致谢。

    在这种情况下, printf接收的参数将是int类型。

    首先,传递给printf的任何内容(第一个参数除外)都经历“默认促销”,这意味着(除其他外) charshort在传递之前都被提升为int 。 所以,即使你传递的内容真的有char类型,当它到printf它会有int类型。 在您的情况下,您使用的是字符文字,无论如何都已经使用了int类型。

    scanf和其他采用可变参数的函数也是如此。

    其次,即使没有默认促销,C中的字符文字仍然具有int类型(§6.4.4.4/ 10):

    整数字符常量的类型为int。

    因此,在这种情况下,值以int类型开头,并且不会被提升 – 但即使您以char开头,例如:

     char a = 'a'; printf("%d", a); 

    printf接收的是int类型,而不是类型char

    C ,char literal是int类型的值。

    它会为您输入的字符打印DEC ASCII。

      以上就是c/c++开发分享printf太聪明了从char到int?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545920.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注