我可以直接为指针分配地址吗?如果是,如何做到这一点
Can I directly assign an address to a pointer? If so, how to do that?
int main()
{
int a = 2; // address is 0x7ffeefbff58c
int *b = &a;
std::cout << "address of a: " << b << std::endl;
return 0;
}
我在地址0x7ffeefbff58c处有一个int变量a,但我可以用0x7ffeefbff58c直接分配int*b吗?
我尝试过int*b=0x7ffeefbff58c;但是有一个错误说"不能用'long'类型的右值初始化'int*'类型的变量",那么我必须使用(&a(的地址来初始化指针吗?或者还有别的办法?
我可以用0x7ffeefbff58c直接分配int*b吗?
从技术上讲,是的。
如果是,如何做到这一点?
具有重新解释的强制转换。
但是要意识到,通常绝对不能保证a
会在地址0x7ffeefbff58c中。因此,将这样的整数重新解释为指针并没有什么可做的。使用局部变量执行此操作将是毫无意义的。
将整数解释为指针是有用的一种情况是,一些嵌入式系统为特殊目的保留了一些恒定的内存地址。
Heere就是一个例子:
#include <iostream>
int main()
{
int *b = (int*) 0x7ffeefbff58c;
std::cout << "b: " << b << std::endl;
return 0;
}
编译和执行后,您将看到输出:
b: 0x7ffeefbff58c
相关文章:
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 模板类是这里的最佳选择吗?如果是,我该怎么做?
- 如果消息被 TCP 分段,接收方会做什么
- 如果将两个相同的指针作为输入传递,memcmp 会做什么?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- 如果 strlen 在 char 数组之间遇到空格,它会怎么做
- 如果输入图像矩阵实际上是复杂类型,MATLAB imresize() 会怎么做?
- 如果malloc/free对显然做了同样的工作,为什么C++标准库容器使用内存池
- 如果使用#Define而没有任何分配值,它将做什么
- 如果语句检查会做什么?
- 如果复制构造函数所做的一切都可以使用"="来完成,那么它有什么用?
- 如果您所做的只是等待它完成,为什么要使用异步
- 如果"somethings"不需要访问"this",那么在"delete this"后做某事是否安全?
- 如果我在C++中使用堆,我是不是做错了什么
- C++当我们创建对象时,构造函数会初始化,但是如果我想再次重新初始化对象,请在 main 的某个时候说该怎么做
- 我正在尝试做一个循环,检查输入是否是一个数字,如果没有再次询问
- 这是对reinterpret_cast的合法使用吗?如果不是,我该怎么做
- 如果你只有一个标识符,#define 做什么
- 如果我做 printf( "one two" );会发生什么?