c++ - 引用自身的 C++ 指针不产生预期的输出
问题描述
我正在使用 C++ 指针,我遇到了一些奇怪的事情。如果我使用“b = (int*)&b;”重置指向自身的指针,我希望延迟输出是自身的内存地址——因为它指向自身。
所以我认为 *b 会是“0x7ffea00819b0”,但这是一些奇怪的数值。
但事实并非如此。我得到的替代值令人困惑。
这是我的输出:
Value of a = 10
Address of a = 0x7ffea00819ac
Value of b = 0x7ffea00819b0
Address of b = 0x7ffea00819b0
Dereference of b = -1610081872
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int a = 10;
int *b = &a;
b = (int*)&b;
cout << "Value of a = " << a << endl;
cout << "Address of a = " << &a << endl << endl;
cout << "Value of b = " << b << endl;
cout << "Address of b = " << &b << endl;
cout << "Dereference of b = " << *b << endl;
}
解决方案
将类型更改为 unsigned long int 解决了该问题。谢谢你们!
#include <iostream>
#include <type_traits>
using namespace std;
int main(int argc, char** argv)
{
unsigned long int a = 10;
unsigned long int *b = &a;
b = (unsigned long int*)&b;
cout << "Value of a = " << a << endl;
cout << "Address of a = " << &a << endl << endl;
cout << sizeof b << endl;
cout << sizeof *b << endl;
//static_assert(sizeof b == sizeof *b);
cout << "Value of b = " << b << endl;
cout << "Address of b = " << &b << endl;
cout << "Dereference of b = " << hex << "0x" << *b << endl;
}
推荐阅读
- html - 如何在运行时传递可由 html 代码选择的参数
- java - Thymeleaf 和 SpringBoot 的 NoSuchMessageException
- swift - 楼梯问题 Swift 打印“#” n 和 n-1 次
- catboost - 在 catboostclassifier 中使用 class_weights
- apache-storm - 使用状态索引在 Stormcrawler 上运行多个拓扑
- javascript - For循环仅打印最后一次迭代
- azure - Azure 流分析作业 - 固定 1 小时窗口内的累计金额
- ios - 有什么方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?
- java - 寻求有关编译器生成的 lambda 的文档,以将 Java 8 中的专用转换为通用功能对象
- html - 如何使下拉菜单向下打开而不是侧向打开?