热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在c语言中%d和%*d的区别是什么?-Whatisthedifferencebetween%dand%*dinclanguage?

Whatis%*d?Iknowthat%disusedforintegers,soIthink%*dalsomustrelatedtointegeronly?

What is %*d ? I know that %d is used for integers, so I think %*d also must related to integer only? What is the purpose of it? What does it do?

% * d是什么?我知道%d是用于整数的,所以我认为%*d也只能与整数有关?它的目的是什么?它做什么?

int a=10,b=20;
printf("\n%d%d",a,b);
printf("\n%*d%*d",a,b);

Result is

结果是

10 20 
1775 1775 

3 个解决方案

#1


17  

The %*d in a printf allows you to use a variable to control the field width, along the lines of:

printf中的%*d允许您使用一个变量来控制字段宽度:

int wid = 4;
printf ("%*d\n", wid, 42);

which will give you:

这将给你:

..42

(with each of those . characters being a space). The * consumes one argument wid and the d consumes the 42.

(每个都有。字符作为一个空间)。*消耗一个参数wid,而d消耗42。

The form you have, like:

你的表格,比如:

printf ("%*d %*d\n", a, b);

is undefined behaviour as per the standard, since you should be providing four arguments after the format string, not two (and good compilers like gcc will tell you about this if you bump up the warning level). From C11 7.20.6 Formatted input/output functions:

是按照标准的未定义的行为,因为您应该在格式化字符串之后提供4个参数,而不是两个(如果您提高了警告级别,像gcc这样好的编译器会告诉您这一点)。从C11 7.20.6格式化输入/输出函数:

If there are insufficient arguments for the format, the behavior is undefined.

如果对格式没有足够的参数,则行为是未定义的。

It should be something like:

应该是这样的:

printf ("%*d %*d\n", 4, a, 4, b);

And the reason you're getting the weird output is due to that undefined behaviour. This excellent answer shows you the sort of things that can go wrong (and why) when you don't follow the rules, especially pertaining to this situation.

你得到奇怪输出的原因是由于未定义的行为。这个优秀的回答会告诉你,当你不遵守规则时,会出现什么问题(以及为什么),尤其是在这种情况下。

Now I wouldn't expect this to be a misalignment issue since you're using int for all data types but, as with all undefined behaviour, anything can happen.

现在,我不希望这是一个错误对齐的问题,因为您在所有数据类型中都使用int,但是,和所有未定义的行为一样,任何事情都可能发生。

#2


10  

When used with scanf() functions, it means that an integer is parsed, but the result is not stored anywhere.

当使用scanf()函数时,它意味着解析一个整数,但结果不会存储在任何地方。

When used with printf() functions, it means the width argument is specified by the next format argument.

当与printf()函数一起使用时,它意味着宽度参数是由下一个格式参数指定的。

#3


5  

The * is used as an indication that the width is passed as a parameter of printf

*被用来表示宽度作为printf的参数传递。


推荐阅读
  • VS用c语言连接mysql,c语言连接mysql完整演示
    #include#includeintmain(){MYSQL*conn;创建一个指向mysql数据类型的指针connmysql_init(NULL);mysql的初始化if(!c ... [详细]
  • 展开全部ctypes:可直接调用c语言动态链接库。使用步骤:1编译好自己的动态连接库2利用ctypes载入动态连接库3用ctype调用C函数636f707962 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • Linux下C语言的几道经典面试题小结(分享)
    本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。1、如果在Linux下使用GCC ... [详细]
  • c语言翁恺28讲,翁恺的c语言视频怎么样
    本文目录一览:1、翁凯的c语言视频多长时间2、 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
author-avatar
孩子气zyj2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有