什么数据类型是地址?

时间:2015-10-03 18:44:18

标签: c++ dictionary types

我有一个存储字符串的映射,以及包含整数值或char值的相应地址(内存)。

map<string,address> myMap;  //What datatype would address be?

我不确定我会在这里放什么数据类型任何帮助都会很棒

6 个答案:

答案 0 :(得分:3)

所以基本上你想要在unordered_map内映射类型通用地址。然后只需定义自己的数据类型即可安全地管理它,例如:

class Address
{
public:
  virtual uintptr_t getAddress() = 0;
  virtual ~Address() { }
};

template<typename T>
class RealAddress : public Address
{
private:
  T* address;
public:
  RealAddress(T* address) : address(address) { }
  uintptr_t getAddress() override { return address; }

}

std::unordered_map<std::string, std::unique_ptr<RealAddress>> labels;
labels["foo"] = std::unique_ptr<Address>(new RealAddress<int>(address));

这只是为了给你一个想法,不清楚你的数据部分是否已经存储在程序本身中(所以你真的有一个int*char*)或者如果你只需要一个数字地址,然后在汇编程序中重新定位。

您可以丰富行为,使用enum class或RTTI来区分类型等。

一个非常简单的解决方案就是拥有像

这样的东西
union Address
{
  char* addressChar;
  int* addressInt;
  Address(int* addressInt) : addressInt(addressInt) { }
  Address(char* addressChar): addressChar(addressChar) { }
};

答案 1 :(得分:2)

C或C ++中指针的“地址”对应。

尝试使用指向整数或整数数组的指针:

map<string, int*> myMap;

这是指向char或char数组的指针:

map<string, char*> myMap2;

答案 2 :(得分:2)

内存地址的数据类型是指针,它由它指向的类型表示,后跟星号(*)。例如,如果您存储int的地址,您的声明将如下所示:

map<string, int*> myMap;

如果您在使用Google搜索时遇到问题,请尝试搜索“指针”,而不是“地址”。

答案 3 :(得分:2)

地址存储在复合类型中,称为指针类型

为了获得指向int指针类型,您使用'*'符号:

int i; // integer
int* ip; // pointer to integer (stores the address of an int)

map<string, int*> myMap;  // pointer type pointing to an int

答案 4 :(得分:2)

您可以考虑创建一个包含指针和数据类型的自定义类地址。就这样了     映射&LT;串,地址&gt; MYMAP;
仍然有效。

答案 5 :(得分:0)

以下是您正在寻找的惯用类型:

std::map<std::string, boost::variant<int*, char*>>