c语言输出指针中的值报错,C语言 printf 格式输出指针总结

首先上代码,代码示例如下:

#include

#include

void main(){

int i=10;

printf("i value is: %d\n",&i); //1.1

printf("i addr is: %p\n",&i); //1.2

int *pp=0;

pp=&i;

printf("pp value: %d\n",pp); //2.1

printf("pp addr: %p\n",pp); //2.2

printf("pp v: %d\n",*pp); //2.3

}

1. 先分析1.1,2.1以及1.2, 2.2

输出结果:

i value is: 1706007260

i addr is: 0x7fff65af9adc

pp value: 1706007260

pp addr: 0x7fff65af9adc    所以 “%p”表示的是以十六进制打印出指针变量对应的地址值。

“%d”表示的是以十进制打印出指针变量对应的地址值。

2. 然后就是2.3

输出结果:

pp v: 10    所以,如果要打印出指针变量所存地址对应的值,应该要加上*运算符。

3. 其实还可以试试以%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值的话,是会报错的。再思考片刻,我想指针初始化的含义你已经明白了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值