c/c++语言开发共享Printf的结果(“%d”,&a)

我有一个C代码。

int a; a =10; printf ("%d", &a); 

我想知道是否会打印一些垃圾或显示错误信息。 基本上我有兴趣了解printf的工作原理。 它是否有表格中的变量列表。 如果有一个表,那么它将采用&a的值

    这是一个初学者的问题,值得正确回答。 (我被downvotes和非建设性评论吓到了)

    让我一行一行地走一走:

     int a; 

    第一行声明一个名为a的变量。 该变量的类型为integer并带有普通编译器(Windows上为Microsoft Visual C ++,Linux上为GCC,Mac上为Clang),通常为32位宽。 整数变量已签名,因为您未指定unsigned。 这意味着它可以表示从-2,147,483,648到2,147,483,647的值。

     a =10; 

    第二行将值10赋给该变量

     printf ("%d", &a); 

    第三行是您获得惊人结果的地方。 "%d"是“格式字符串”,它定义了如何格式化并随后打印作为进一步参数给出的变量。 格式字符串包括普通文本(将正常打印)和控制序列。 控制序列以字符%开头,以字母结尾。 该字母指定了预期的参数类型。 在上述情况下, d需要一个整数值。

    您的代码的问题是您没有指定itenger值,您给出一个整数值的地址(使用地址&运算符)。 正确的陈述是:

     printf ("%d", a); 

    简单。

    我建议您阅读一本好的C书。 我推荐来自该语言原作者的“C编程语言”。 你在亚马逊上找到这本书,但你也发现它也在网上 。

    您可以在标准中找到相同的答案。 但说实话,这些文件并不容易阅读。 您可以在此处找到C11标准的草稿。 格式化选项的说明从第309页开始。(草稿通常足以用于编程目的,并且通常可免费提供)。

    这是未定义的行为 。

    如果你是C的新手,这可能是一个惊喜。 但是,C规范定义了某些程序的行为(称为“正确的程序”)。 如果您不遵守规范中的规则,那么您的程序是不正确的,并且确实可能​​发生任何事情。 以上链接更详细。

    您的程序不遵循规则,因为printf%d格式说明符必须具有int类型的相应参数(在默认参数提升之后),而是传递int *类型的参数。

    由于它是未定义的行为,输出是没有意义的,通常不值得研究。

    它将打印变量’a’的地址。 请记住,&运算符返回操作数的地址。

    需要了解更多c/c++开发分享Printf的结果(“%d”,&a),也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享Printf的结果(“%d”,&a)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980647.html

      (0)
      上一篇 2021年12月14日
      下一篇 2021年12月14日

      精彩推荐