C语言关于输出printf输出格式的问题

22:47 提问
C语言printf输出问题.....
char *p = "asd";
printf(p);
明明定义printf的时候,是printf("const char*format",...)
应该是常量指针,我又没有定义成常量,怎么程序还能用啊?
按赞数排序
(1) p指针可以修改,但是“asd”是一个字符串常量,p获取到的值是这个字符串常量的地址值
(2) printf中的参数是要求用const值,这个要求只是说明printf函数不会修改这个参数的值而已,跟p是不是const指针没有任何关系
这里const是指被调用者来说的,也就是printf内部不能修改。对于调用者没有限制
你这里p其实就是const char*
虽然没有直接指定。
但编译器会这么做。
char *p = "asd";这是给指针变量初始化吗?可是初始化不是要初始化一个地址吗?
“asd”就是常量,p就是这个常量的指针。
printf("const char*format",...)代表printf函数对指针所引用的变量只能读,不能修改。安全原因。
如果没有const,printf函数就可以修改引用变量的值。如果你愿意的话,可以修改printf函数来改变
(1)p指针可以修改,但是“asd”是一个字符串常量,p获取到的值是这个字符串常量的地址值
(2) printf中的参数是要求用const值,这个要求只是说明printf函数不会修改这个参数的值而已,跟p是不是const指针没有任何关系
可变量可以自动转化为常量,但常量不能转化为变量。如int可以转化为const int,但const int 不能转化为int (除非你强制转化)。
非const指针可以传递给要求参数是const指针的函数。(相当于增加了const属性)
反过来编译器会报warning,说const属性丢失。
const 修饰的是不能修改该变量值
其他相关推荐欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 909 人关注过本帖
标题:一个关于printf();输出格式问题
等 级:新手上路
&&已结贴√
&&问题点数:10&&回复次数:14&&&
一个关于printf();输出格式问题
#include&stdio.h&
void main ()
float a,b;
printf(&a=%d b=%d\n&,a,b);
输出&&a=0 b=&&为什么?
我开始以为是printf()有输出缓冲问题,把a的值改成很大,最后输出a仍然是零,只是b的值稍微变了点(后几位)我也用vc6.0调试了可是调试不出来,我的win7 32位系统
搜索更多相关主题的帖子:
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
楼主,你的a,b都是float类型,但你输出时用的却是%d(整型)。改成%f
当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
#include&stdio.h&
void main ()
float a,b;
printf(&a=%.3f b=%.3f\n&,a,b);
&&&唯实惟新 至诚致志
等 级:小飞侠
帖 子:920
专家分:2514
楼上正解。
冰冻三尺,非一日之寒;士别三日,不足刮目相看!
等 级:新手上路
就是故意的%d,可是为什么一个是输出0;一个是那么大的数
等 级:新手上路
b的输出小于2^32
等 级:新手上路
右下角表明内存中a b 中确实是真确的值,可是printf后 怎么就变样了?
附件: 您没有浏览附件的权限,请
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
以下是引用坐坐吧在 10:12:24的发言:
就是故意的%d,可是为什么一个是输出0;一个是那么大的数这要涉及到两个计算机原理的概念:补码和浮点数。
补码一般在大一第一学期的《计算机文化基础》课中都涉及到了,而浮点一般只是一带而过,这个内容要到研究生阶段才会深入讲解。
综上,要知道输出的原因,请先了解补码和浮点的概念。
当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
等 级:新手上路
高手请进那
等 级:论坛游民
帖 子:37
专家分:15
看来得学习一下浮点的概念!
淫荡成就梦想,猥琐引领时尚!
版权所有,并保留所有权利。
Powered by , Processed in 0.052065 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved显示-printf和输出格式疑问
作者:用户
浏览:254 次
printf和输出格式疑问问题出在printfintmain(){inti=1;floatf=5;printf(""%d%f%dn""ifi);printf(""%d%d%d%dn""ifii);
printf和输出格式疑问
问题出在printfint main(){
float f=5;
printf(""%d
%f %dn""ifi);
printf(""%d
%d %d %dn""ifii);
printf(""%d
%d %d %dn""i(int)fii);
printf(""%d
%dn""iif);
system(""pause"");
return 0;}显示如下:1 ,5.000000 ,11 ,0 , ,11 ,5 ,1 ,11 ,1 ,0为么第二行第二个i显示不正常,float f=5;根据IEEE754,那么f的二进制表示=0,按照printf %d十进制显示 f 应该是,而不是
解决方案二:
那个博客说的不好,我补充下。这是C++语言函数变长参数的特性。printf会根据类型,从堆栈上取数据来做为参数。int是4个字节,而float是8个字节。所以当你传了ifii其实堆栈上是4+8+4+4个字节分别是这四个变量使用%d %d %d %d,则是相当于输出了第一、二、三个参数,忽略了最后一个i,而第二个参数则拆分成两半,第一个是0,第二个是,它都属于那个float
解决方案三:
应该是你float格式用的%d,造成后面int类型t处理不正确。
解决方案四:
上面都说的对,printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供C语言中的scanf与printf
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
C语言中的scanf与printf
最初学习C语言程序设计时,经常需要通过键盘交互方式请用户输入内容,并需要将用户计算的结果在屏幕上输出。为实现这样的操作,C语言提供了scanf与printf两个函数,使用它们之前,一般需要包含stdio.h头文件。
语法是: #include &stdio.h&
1. 使用scanf函数的注意事项。
scanf函数的一般语法格式为 scanf(格式占位符列表,变量地址列表),常用的格式占位符有%d(整型数),%f(浮点型数)等。
示例:1) 输入一个整型值给变量a : scanf(&%d&,&a); //注意a前有&取地址符,因为语法格式要求此处是变量地址。
2)输出两个整型值分别给变量a,b
可以使用两条scanf函数语句来实现:
scanf(&%d&,&a); scanf(&%d&,&b);
这种写法主要的缺点就是繁琐,几个变量就需要写几篇scanf,输入数据时,两次数据间用空格或回车分隔都可以。
也可以使用一条scanf函数语句实现:
scanf(&%d%d&,&a,&b); //注意两个%d是放在一个双引号内,中间不需要使用任何分隔符,在程序运行输入数据时,用户可以用空格或回车将两个数分隔开。
特别提醒注意的是:如果写成 scanf(&%d,%d&,&a,&b); 那么用户在输入数据时,中间也必须用,将两个输入数据分隔开。
2. printf()函数
基本语法格式 printf(格式占位符列表,变量列表);
在printf()函数中,格式占位符决定了输出的样子,只是在占位符列表中,用占位符%d等先把位置占住,然后将后面的变量值依次填入前面的占位符处。
例如: 假设a的值为50,b的值为78
printf(&%d&,a); 此函数语句代表将变量a的值输出,因为格式占位符列表中只有一个%d,所以只输入一个值屏幕上显示的输出结果为 50
printf(&%d,%d&,a,b) 此函数表示将a与b两个变量的值输出,中间还需要有一个逗号,这是由输出格式决定的,格式占位符列表为 %d,%d,就表示要输出两个变量,变量中间有逗号,执行时,将a的值填在第一个%d处,b的值填在第2个%d处。屏幕中显示的输出结果为 50,78
printf(&a=%d,b=%d&,a,b) 格式占位符是 a=%d,b=%d 其中a=,b=这都会原样输出,后面a,b的值分别填入前两个%所在位置。屏幕中显示的输出结果为 a=50,b=78
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&}

我要回帖

更多关于 printf输出格式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信