*号在C语言格式化字符串中的作用

只要熟悉C语言的人,没有不熟悉格式化字符串的,因为基本上所有人学习C语言的第一个函数都是printf函数。当然printf所支持的格式化输出字符串也是每个学习C语言的人所熟悉。但是这几天在查看一个开源库代码的时候发现在格式化字符串中有“*”号,恕Simon愚钝,猛一看还真不知道什么意思。看来学习无止境阿,我们整天用的printf函数还是需要我们再进行深入学习的!

请看如下函数代码:

   1: #include <;stdio.h>
   2: 
   3: int main()
   4: {
   5:     int width = 10, precision = 2;
   6:     double pi = 3.1415926;
   7: 
   8:     printf("%*.*f", width, precision, pi);
   9: }
  10: 

上面的代码输出是什么呢?上面的*代表什么呢?让人迷惑阿!

把上面的代码转换一下,转换成另外一段代码大家熟悉了。上面的代码等价于下面的代码:

   1: #include <;stdio.h>
   2: 
   3: int main()
   4: {
   5:     double pi = 3.1415926;
   6: 
   7:     printf("%10.2f", pi);
   8: }
   9: 

如果问上面这段代码的输出是什么?大家肯定都知道是什么了吧。

在C语言的格式化字符串中的*的作用就是,从后面的参数中读取一个整数来代替这个*,以上面的例子为例:第一*将会读取width来代替*号,第二个*号将会读取下一个参数precision来代替*号。这样就等价printf("%10.2f", pi)了。

发表回复