我可以直接将地址分配给指针吗?如果是这样,该怎么做?

时间:2019-11-20 16:22:53

标签: c++ pointers

int main()
{
  int a = 2; // address is 0x7ffeefbff58c
  int *b = &a;
  std::cout << "address of a: " << b << std::endl;
  return 0;
}

我在地址0x7ffeefbff58c中有一个int变量a,但是我可以直接为int * b分配0x7ffeefbff58c吗?

我尝试了int * b = 0x7ffeefbff58c; 但是有一个错误提示“无法用'long'类型的右值初始化'int *'类型的变量”,所以我必须使用(&a)的地址来初始化指针吗?还是有其他方法可以做到?

2 个答案:

答案 0 :(得分:5)

  

我可以直接用0x7ffeefbff58c分配int * b吗?

从技术上讲,是的。

  

如果是,该怎么做?

使用重新解释演员表。

但是要意识到,绝对不能保证a会在地址0x7ffeefbff58c中。因此,将整数重新解释为指针没有什么可做的。使用局部变量执行此操作将毫无意义。

将整数解释为指针很有用的情况是某些嵌入式系统为某些特殊目的保留一些常量内存地址。

答案 1 :(得分:0)

Heere是一个例子:

#include <iostream>
int main()
{

  int *b = (int*) 0x7ffeefbff58c;
  std::cout << "b: " << b << std::endl;
  return 0;
}

编译和执行后,您将看到输出:

b:0x7ffeefbff58c