`
mmdev
  • 浏览: 12889003 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

【C/C++和指针】printf 的那些事

 
阅读更多

一,printf

1)作用:产生格式化输出的函数(定义在 stdio.h 中)。

2)用法:int printf(const char *format,[argument]);

format 参数输出的格式,定义格式为:%[flags] [width] [.perc] [F|N|h|l] type  

 规定数据输出方式,具体如下:

   1.type 含义如下:

   d 有符号10进制整数

   i 有符号10进制整数

   o 无符号8进制整数

   u 无符号10进制整数

  x 无符号的16进制数字,并以小写abcdef表示

   X 无符号的16进制数字,并以大写ABCDEF表示

   f 浮点数

   E/e 用科学表示格式的浮点数

   g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数

   c 单个字符

   s 字符串

   S wchar_t字符(宽字符)类型字符串

   % 显示百分号本身

   p 显示一个指针,near指针表示为:XXXX

   far 指针表示为:XXXX:YYYY

   n 相连参量应是一个指针,其中存放已写字符的个数

  2.flags 规定输出格式,取值和含义如下:

   无 右对齐,左边填充0和空格

   - 左对齐,右边填充空格

   + 在数字前增加符号 + 或 -

   0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)

   空格 输出值为正时冠以空格,为负时冠以负号

   # 当type=c,s,d,i,u时没有影响

   type=o,x,X时,分别在数值前增加'0',"0x","0X"

   type=e,E,f时,总是使用小数点

   type=g,G时,除了数值为0外总是显示小数点

  3.width 用于控制显示数值的宽度,取值和含义如下

   n(n=1,2,3...) 宽度至少为n位,不够以空格填充

   0n(n=1,2,3...) 宽度至少为n位,不够左边以0填充

   * 格式列表中,下一个参数还是width

  4.prec 用于控制小数点后面的位数,取值和含义如下:

   无 按缺省精度显示

   0 当type=d,i,o,u,x时,没有影响

   type=e,E,f时,不显示小数点

   n(n=1,2,3...) 当type=e,E,f时表示的最大小数位数

   type=其他,表示显示的最大宽度

   .* 格式列表中,下一个参数还是width

  5.F|N|h|l 表示指针是否是远指针或整数是否是长整数

   F 远指针

   n 近指针

   h 短整数或单精度浮点数

   l 长整数或双精度浮点数

3)函数返回值:  

  printf函数类型为整型,其返回值是整型值。

  其值实际为printf控制输出的字符数。

  printf()函数实际上是将所有参数按字符输出,根据该函数的参数1(const char *format),我们不难理解。

  例如:

  int a,b;

  a=printf("gelin\n"); //a的值为6,

  b=printf("the value of printf is:%d",a); //b的值为24

4)特别注意

printf 从右向左执行!!!

5)示例

1> printf("%10.5f\n",5.2); // 右对齐位宽 10个字符,小数点后5位


2>printf("%f",3); // 整型3不会被隐式类型转换为浮点型,而是被直接按内存内容当作浮点型

内部使用等价于
int i = 3;
printf("%f", *(float*)&i)

对于%f默认为double浮点型(64位,默认的显示精度是小数点后6位)则3实际的值接近于0


根据IEEE 754标准对64位浮点数采用的表示为:
数符(1位)| 阶码 (11位) | 尾数 (52位)
内存中整数3就是 00000000 00000000 00000000 00000011 +32位随机值

所以输出值为:0.000000

3>printf("%d",5.01); // 输出一个大数

按int类型寻址4个字节,会产生大整数


分享到:
评论

相关推荐

    C/C++指针与教程

    CHM格式,直接下载即可用,比较小不错的参考,自己整理...1、C指针精华文章 2、键盘扫描码以及整数型对照表 3、C/C++语言编程规范 4、谭版C教程 5、ASCII码表及其它常用表对照 6、C最常用函数释疑,含scanf()、printf()

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    c/C++面试题大全--96页

    本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。  许多面试题看似简单,却需要深厚的基本功才能给出...

    C/C++指针和取地址的方法

    printf(“%p\n”,&a);//输出:002AF744 printf(“%p\n”,ap);//输出:002AF744 printf(“%d\n”,*ap);//输出:100 printf(“%p\n”,&ap);//输出:002AF738 printf(“%p\n”,&*ap);//输出:002AF744 scanf(“%d”); ...

    C/C++指针经典面试题解析

    #include char *c[]={ENTER,NEW,POINT,FIRST}; char **cp[]={c+3,c+2,c+1,c}; char ***cpp=cp; void main() { ...**考点:这道题目主要在于对 “一维指针数组c” 与 “二维指针数组cp” 及 “三维

    C/C++面试题目及解答.doc

    用C/C++语言写一函数完成该算法,给出复杂度 <br>6.对序列1、1、2、3、5、8、13。。。。 是Fab..数列 2、3、5、13...是Fab..质数数列,因为他们与自己前面的Fab...数列都互质 给出k,返回第k小的...

    经典C/C++面试题目大汇总(全附答案).doc

    原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。 引用型参数应该在能被...

    scanf和printf指针使用情况

    验证指针在函数中的用法 运行平台:Borland C++ Builder 6.0 调试时间:1:13AM 05/27/2005 调试目的:为验证指针在函数中的用法 源程序为适应C++ Builder 6.0,故作了稍微修改。

    程序员面试题精选100题(C/C++)

    pdf版的,很清晰,对应届生找工作很有帮助的!

    浅析C/C++中的可变参数与默认参数

    C/C++支持可变参数个数的函数定义,这一点与C/C++语言函数参数调用时入栈顺序有关,首先引用其他网友的一段文字,来描述函数调用,及参数入栈: ———— 引用开始 ———— C支持可变参数的函数,这里的意思是C支持...

    C/C++之回调函数

    讨论下C/C++中的回调函数。  在理解“回调函数”之前,首先讨论下函数指针的概念。  函数指针  (1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中...

    Java程序员要知道的C/C++函数

     功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)返回指向第一次出现needle位置的指针,如果没有找到则返回NULL。  (2)函数原型:extern float pow(float x, float y);  用法:#...

    C/C++ 中堆和栈及静态数据区详解

    C/C++ 中堆和栈及静态数据区详解  五大内存分区  在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。下面分别来介绍:  栈,就是那些由编译器在需要的时候分配,在不需要的...

    谭浩强C语言教程Word版

    1 C语言概述 2<br/>1.1 C语言的发展过程 2<br/>1.2 当代最优秀的程序设计语言 2<br/>1.3 C语言版本 2<br/>1.4 C语言的特点 3<br/>1.5 面向对象的程序设计语言 3<br/>1.6 C和C++ 3<br/>1.7 简单的C程序介绍 4...

    c语言文件操作系统

    printf("文件打开错误!"); } else { //移动指针指向文件开始 fgetc(fp); while(ch!=EOF) /*从文件读一字符,显示到屏幕*/ { //显示字符 putchar(ch); //继续移动指针读取字符 直到文件结尾 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0 集成开发环境的使用 1.13.1 Turbo C 2.0 ...

    马踏棋盘 栈 链表C++,C语言

    void setnull(seqstack *s) /*置空栈-由于c语言的数组下标是从0开始的,所以置 空栈操作时将栈顶指针放在下标为0之前,即-1处。*/ {s->top=-1;} int empty(seqstack *s) /*判断当前栈是否为空栈*/ { if(s->...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0 集成开发环境的使用 1.13.1 Turbo C 2.0 ...

    数组指针改错

    void mystrcpy(const char *from, char *to) { for ( ; *from!='\0'; from++, to++) *to = *from; *to = '\0'; } ...printf("a = %s, b=%s\n",a,b); mystrcpy(a,b); printf("a = %s, b=%s\n",a,b);

    新手学习C++入门资料

    在C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。 #include iostream.h main() //C++中main()函数默认为int型,而C语言中默认为void型。 { int a; cout; cin>>a; /*输入...

Global site tag (gtag.js) - Google Analytics