C语言 printf 格式输出指针总结

您所在的位置:网站首页 c语言输出指针指向的数组 C语言 printf 格式输出指针总结

C语言 printf 格式输出指针总结

2024-07-15 11:13| 来源: 网络整理| 查看: 265

一句话总结:不同格式化输出控制符对应的是一个存储单元不同的展现形式,该单元的存储值是不变的。

代码见真知,代码示例如下:

#include #include void main(){ int i=10; printf("i value is: %d\n",&i); //1.1 输出结果: i value is: 1706007260     printf("i addr is: %p\n",&i); //1.2 输出结果:i addr is: 0x7fff65af9adc     int *pp=0;     pp=&i;     printf("pp value: %d\n",pp); //2.1 输出结果:pp value: 1706007260     printf("pp addr: %p\n",pp); //2.2 输出结果:pp addr: 0x7fff65af9adc     printf("pp x value: %x\n",*pp); //2.3 输出结果:pp x value: 0x7fff65af9adc } 1. 先分析1.1,2.1以及1.2, 2.2

      结论:

%d 将所给存储单元以十进制有符号型形式输出。

%p 将所给存储单元以十六进制输出指针变量对应的地址值。

%x 将所给存储单元以十六进制形式输出。

注: 其实还可以试试以%x格式打印出指针变量对应的地址值

如果在64位系统下编译运行的话,会发现相对于%p输出结果,少了 7fff 也就是说,结果为ox

pp addr: 65af9adc 具体原因我还不知道,我这里测试的环境是64位fedoral。所以我估计是因为在当前环境中,以7fff为前缀的地址都是属于内存区域中的NORMAL,所以以%x形式输出时省略了其前缀,同时在64位系统中,地址的长度为48位。

4.  关于指针初始化,不得不说

    这里将指针变量pp初始化位0,只是将pp变量初始化为0,也就是对应的地址为(nil)。如果是10的话,是oxa。这里如果直接去引用pp所对应的int值的话,是会报错的。再思考片刻,我想指针初始化的含义你已经明白了。

5. 要注意区分float和double类型的输入/出格式控制符:float(%f),double(%lf)!

    一般情况下是不会有太大差别,但是对于scanf函数,如果要输入double类型数据,则必须使用%lf控制符,形如,scanf("%lf", &dnum);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3