C++地址值为1(情况说明)

关于C++中地址值打印出来为1的情况;以下是测试代码:


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
        const volatile  int a = 10; 
    
        cout << &a <<endl;
        int *p = (int *)&a;

        *p = 12; 

        cout<< "地址:"<< p << setw(20) << "a:" << &a <<endl;
        cout << *p << setw(10) << a << endl;


        return 0;
}

运行结果:

在这里插入图片描述

(1)因为cout << 似乎没有对(volatile int*)做重载运算符的操作,因此 << 输出符不认得volatile关键字,所以默认如果变量值大于0输出值为1(true),如果小于0 输出值为0(false),默认以bool型输出

(2)之所以被转成了bool类型是因为指针可以转换为 bool。空指针为 false、其它值为 true;因为bool默认的输出方式是值,所有输出的值是1,我们其实可以通过std中的boolalpha(把bool解析为true或false)打印一下

在这里插入图片描述

结果为:

在这里插入图片描述

(注:c++中例如函数指针也是没有对应的的输出函数std::basic_ostream::operator<< 输出时也会遇到这种情况的)


如果我们想把该地址打印出来也是可以的,有两种方式:


(1):使用C语言中的printf输出打印,c++中打印不了是因为c++中没有对应(volatile int*)的输出函数,因此可以使用printf
(2):把(volatile int*)类型强转为(void *)类型,因为cout>>的输出运算符中没有(volatile int *)类型导致输出不了,所有我们可以把它这个类型强转为它认识的类型就可以正常输出了
#include <stdio.h>
#include <iomanip>

using namespace std;

int main()
{
        const volatile  int a = 10; 
    
        int *p = (int *)&a;

        *p = 12; 

        cout<< "地址:"<< p << setw(20) << "a:" << (void *)&a <<endl;
        printf("a:%p\n",&a);
        cout << *p << setw(10) << a << endl;


        return 0;
}

运行结果

结果

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值