忘了的c知识点,请指教一下

cprime 2008-09-28 04:15:51
程序和执行结果
[@localhost abc]$ cat near_far.c
#include <stdio.h>

main()
{
char *near_title = "Jamsa's 1001 C & C++ Tips";
char *far_title = "Jamsa's 1001 C & C++ Tips";

printf("The book's title: %ds\n", near_title);
printf("The book's title: %Fs\n", far_title);
}
[8@localhost abc]$ ./a.out
The book's title: 134513892s
The book's title: -0.012750s
[@localhost abc]$
“%Fs”对应的这个值-0.012750s,这里怎么理解阿?
这个值是指针的地址值,还是什么,请指教。
...全文
114 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hchen2008 2008-09-28
  • 打赏
  • 举报
回复
楼主的原意应该是输出2个字符串吧。
printf("The book's title: %s\n", near_title);
printf("The book's title: %s\n", far_title);

输入输出控制
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x,%X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
scklotz 2008-09-28
  • 打赏
  • 举报
回复
printf("The book's title: %ds\n", near_title);
printf("The book's title: %Fs\n", far_title);

压入printf参数栈的,实际上分别是两个指针值。即在32位系统下,是4个字节的值。
对printf函数来说,s是没用的,格式化参数为 %d 和 %F
%d 自然就是 near_title 的指针值的十进制
%F 就是 far_title 的值,实际上就是4字节内存的值,所代表的浮点数。但这个具体和sprintf的%F实现有关。是4字节还是8字节看实现。
btw:浮点数的具体表示是有标准的,叫ieee什么来着。
cprime 2008-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 P_leopard17 的回复:]
不是地址,显示指针的值(即地址)时,应该使用%p
在这里,%ds,%Fs中字符s都是没有用的,只是相当于普通显示字母s,没有和%结合
%F这种形式,貌似也是错的,我的c手册不在手中,你可以自己查一下
[/Quote]
这里显示的浮点值,代表的是什么意思呢?这是我问这个问题的重点,请指教。
cprime 2008-09-28
  • 打赏
  • 举报
回复
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x,%X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
cprime 2008-09-28
  • 打赏
  • 举报
回复
感谢各位的指点,我也在回看输入输出控制。
lbh2001 2008-09-28
  • 打赏
  • 举报
回复
%F这种形式,貌似也是错的
//////////////////////////

%F是错的
F唯一的用途就是指定单浮点数, 如 5.3F 等同 5.3f
其他好像都是错的
P_leopard17 2008-09-28
  • 打赏
  • 举报
回复
不是地址,显示指针的值(即地址)时,应该使用%p
在这里,%ds,%Fs中字符s都是没有用的,只是相当于普通显示字母s,没有和%结合
%F这种形式,貌似也是错的,我的c手册不在手中,你可以自己查一下
JJ#Wang 2008-09-28
  • 打赏
  • 举报
回复

char *far_title = "Jamsa's 1001 C & C++ Tips";
//far_title 赋了个地址

printf("The book's title: %Fs\n", far_title);
//far_title用浮点数形式打印出来

要看地址的话用%x打印, %f毛意义都没有
lbh2001 2008-09-28
  • 打赏
  • 举报
回复
%ds ----> %s
%Fs ----> %s

“%Fs”对应的这个值-0.012750s ---->将地址解释为浮点数,字符s原样输出
issacwoods 2008-09-28
  • 打赏
  • 举报
回复
在C中,将一个far指针传递给一个near地址的函数,编译会出错,
所以要用printf显示far_title的时候,必须告诉printf使用far指针,不然printf会默认使用near指针

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧