首页 > 编程语言 >C++地址值为1(情况说明)

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

时间:2023-06-13 09:59:23浏览次数:39  
标签:std 输出 cout int 值为 C++ 地址 volatile include

关于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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
运行结果:


(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;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
运行结果


————————————————
版权声明:本文为CSDN博主「谢永奇1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/takashi77/article/details/108816292

 

标签:std,输出,cout,int,值为,C++,地址,volatile,include
From: https://www.cnblogs.com/im18620660608/p/17476661.html

相关文章

  • 【易错点】数组名和数组取地址的区别
     inta[3]={1,2,3}; a: 数组名,数组中第一个元素的地址,相当于&a[0] &a:整个数组的地址,在数值上等于a a+1:数组中第二个元素的地址,相当于&a[1] &a+1:整个数组结束以后后面一个位置的地址 即:a=&a, 但 a+1≠&a+1 a[0]a[1]a[2]     ......
  • C++面试八股文:static和const的关键字有哪些用法?
    C++面试八股文:static和const的关键字有哪些用法?某日二师兄参加XXX科技公司的C++工程师开发岗位第7面:面试官:C++中,static和const的关键字有哪些用法?二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静......
  • C++面试八股文:了解位运算吗?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面:面试官:了解位运算吗?二师兄:了解一些。(我很熟悉)面试官:请列举以下有哪些位运算?二师兄:按位与(&)、按位或(|)、按位异或(^),按位取反(~)、左移(<<)和右移(>>)。面试官:好的。那你知道位运算有什么优势吗?二师兄:优势主要有两点:1.速度快。2.节......
  • 在地址栏中输入URL,会发生什么
    1.浏览器的地址栏输入URL并按下回车。2.浏览器查找当前URL是否存在缓存,并比较缓存是否过期。3.DNS解析URL对应的IP。4.根据IP建立TCP连接(三次握手)。5.HTTP发起请求。6.服务器处理请求,浏览器接收HTTP响应。7.渲染页面,构建DOM树。8.关闭TCP连接(四次挥手)......
  • LC1171. 从链表中删去总和值为零的连续节点
    题目来源于力扣题库,题目链接:LC1171.从链表中删去总和值为零的连续节点Q:给你一个链表的头节点 head,请你编写代码,反复删去链表中由总和 值为0的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。 你可以返回任何满足题目要求的答案。......
  • c++ create daemonizeMe
    daemonizeMe//Copyright(c)2017DeepAggarwal#include<getopt.h>#include<grp.h>#include<pwd.h>#include<stdlib.h>#include<syslog.h>#include<sys/stat.h>#include<sys/types.h>#include<unistd.h>#include......
  • C++采用Daemon进行后台程序的部署
    文章目录一、如何采用Daemon进行后台程序的部署1.创建子进程2.终止父进程3.创建新的会话4.改变当前工作目录5.重设文件权限掩码6.关闭不需要的文件描述二.代码示例 一、如何采用Daemon进行后台程序的部署在C++中,如果要让一个程序一直在后台运行并且和......
  • 数据结构模拟器地址
    数据结构在线模拟器 Github网址:https://github.com/IACJ/react-datastructer在线网址:https://iacj.github.io/react-datastructer/#/  这个在线的模拟器包含“栈”、“队列”、“堆”、“BST”等数据结构,每个数据结构以图像的方式展示在我们面前,同时又有各自的帮助文......
  • 【C++】STL常用容器总结之十二:string类
    13、string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完......
  • c++中string类的源代码
    一:回顾(1)c++中的string类是在面试中和笔试中经常考的题目;工程代码免费下载 string类的自行实现(2)c++中的string类和fstream类合起来是处理外部数据的利器;(3)string类经常用到findfind_first_offind_first_not_offind_last_offind_last_not_ofsubstrreplace等,以及联合使用来达......