C语言——printf( ) 函数参数传递问题

一、参数说明

printf() 函数是输出函数,可以实现和用户之间的交流,该函数的参数由两部分组成,即格式化字符串、待打印项 0-n 项,函数的格式如下:

printf(格式化字符串, 待打印项1, 待打印项2, ...);

二、工作原理

  1. printf() 函数的调用是告诉计算机把变量的值传递给程序,首先,程序把传入的值按照变量类型放入“栈”内存区;
  2. 然后控制权交给 printf() 函数,该函数根据转换说明从栈中读取数据。

三、举例说明

参数的传递过程以下面的代码为例进行分析:

#include <stdio.h>
int main(void)
{float n1 = 3.0;double n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);return 0;
}
  1. printf() 函数的调用是告诉计算机把变量 n1、n2、n3、n4 的值传递给程序,程序把传入的值按照变量类型放入“栈”内存区。

    按照变量的前后顺序依次在栈中创建内存区域,例子中的 n1 变量类型为 float(8字节),n2 变量类型为 double(8字节),n3 变量类型为 long(4字节),n4 变量类型为 long(4字节),在栈中的内存如下所示:

  2. 变量存好后,控制交给 printf() 函数,该函数根据转换说明从栈中读取数据,%ld 表明函数应该读取 4 字节,所以 printf() 读取栈中的前 4 个字节作为第 1 个值,但是这个值是 n1 实际值的一部分,显示出来的数据是错误的。

  1. 同理,因为转换说明中对于 4 个变量的转换说明都为 %ld,因此需要依次需要读取 4 个字节,这就导致了数据的错位,因此得到的结果也是错的,运行结果如下:
0 1074266112 0 1074266112

C语言——printf()函数参数传递问题相关推荐

  1. C语言中函数参数传递

    C语言中函数参数传递的三种方式 (1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值. (2)地址传递,就是 ...

  2. C语言中函数参数传递的方式:值传递,地址传递

    ** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...

  3. C语言 printf 函数 - C语言零基础入门教程

    目录 一.printf 函数简介 二.C 语言格式符/占位符 三.printf 函数实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 ...

  4. 武林c语言,c语言printf函数的使用

    看C语言程序的时候,往往会遇到printf函数输出,在此,武林小编我就总结一下c语言printf函数的使用,本文对c语言中printf函数的使用进行了详细的分析介绍,需要的朋友参考下. printf的 ...

  5. C语言printf函数格式字符

    C语言printf函数格式字符: 1.%d,按整型数据的实际长度输出. 2.%md,m为指定的输出字段的宽度. 3.%ld,输出长整型数据. 4.o格式符,以八进制整型式输出整数. 5.x格式符,以十 ...

  6. C语言printf函数

    如果你还不知道如何用C语言输出一句话的话那么你来对了地方 C语言由函数构成,有很多的函数构成一个程序 但程序总从主函数(main)开始运行 C语言输出函数printf printf("这里填 ...

  7. C语言printf函数详解和示例

    文章目录 1.类型符(type) 2.宽度(width) 3.对齐标志(flags) 4.精度(prec) 5.格式化输出到字符串 6.获取视频教程 7.版权声明 C语言格式化输出的函数有printf ...

  8. C语言 printf() 函数,总结笔记记录

    道阻且长,行则将至.埋头苦干,不鸣则已,一鸣惊人! 1 printf 函数简介   printf() 和 scanf() 函数,是输入输出函数,或者叫做 I/O 函数.   两个函数,虽然一个是输出, ...

  9. 关于c语言printf函数的详细用法

    C语言的printf输出格式控制 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99) %c         字符 %d         有符号十进制整数 %f   ...

最新文章

  1. Oracle10g安装中遇到的错误及解决办法
  2. 局部敏感哈希算法(Locality Sensitive Hashing)
  3. LINQ To SQL 语法及实例大全
  4. 打破数据统一的七大原则
  5. 车险赔付率分析报告_车险改革究竟是涨价还是降价了?9月19号后买会便宜吗?...
  6. PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较
  7. vector的初始化及常用操作
  8. ubuntu16.04安装metasploit+postgresql
  9. 如果你被领导当众打了一耳光,你会怎么做?
  10. ceph存储原理_Java实战教程:【原理剖析】K8S存储原理剖析与实战
  11. nginx下apk下载,ie9的问题
  12. 【图像融合】基于matlab对比度和结构提取多模态解剖图像融合【含Matlab源码 1539期】
  13. 2012.3.27《JAVA程序设计教程》
  14. 图书馆占座系统(七)
  15. 【Java核心技术卷】I/O详析
  16. axure网页预览_解决Axure发布分享预览的3个方法
  17. 妙算2的串口用自己的接线(杜邦线)连接无人机210或者stm32
  18. 为什么mysql填不了数据库_求助,为何我的数据不能写入数据库
  19. 《计算机网络—自顶向下方法》 第四章Wireshark实验:IP
  20. linux系统运行MapReduce程序报错:exitCode 127

热门文章

  1. 音乐服务器制作教程,让NAS做音乐服务器
  2. 华为 BGP协议基础配置与总结
  3. android 图片叠加xml,Drawable子类之——LayerDrawable (图层叠加)
  4. Android App数据加密
  5. 微信小程序实现登陆功能
  6. python怎样安装whl文件
  7. java基础知识大端模式及其小端模式处理
  8. cython(cython安装)
  9. 百脑汇 Ghost_XP_SP3 电子城国庆版 2012.10
  10. 瑞幸咖啡贵不贵?咖啡不贵,商业却很贵