这里的新问题: 如何将Maptest [2]中存储的值与变量一起更新? 我以为你可以用指针做到这一点,但这不起作用:
map<int, int*> MapTest; //create a map
int x = 7;
//this part gives an error:
//"Indirection requires pointer operand ("int" invalid)"
MapTest[2] = *x;
cout << MapTest[2]<<endl; //should print out 7...
x = 10;
cout <<MapTest[2]<<endl; //should print out 10...
我做错了什么?
答案 0 :(得分:4)
您需要地址 x
。您当前的代码正在尝试取消引用整数。
MapTest[2] = &x;
然后,您需要取消引用MapTest[2]
返回的内容。
cout << *MapTest[2]<<endl;
答案 1 :(得分:0)
请改为尝试:
MapTest[2] = &x;
您希望x的地址存储在int*
中。不是x的取消引用,它将是内存位置0x7,它不会有效。
答案 2 :(得分:0)
这里至少有两个问题:
int x = 7;
*x; // dereferences a pointer and x is not a pointer.
m[2] = x; // tries to assign an int value to a pointer-to-int value
// right
m[2] = &x; // & returns the address of a value
现在你遇到了一个新问题。 x
具有自动生命周期,它将是
在周围范围的末端被摧毁。你需要分配它
来自免费商店(a.k.a. heap)。
int* x = new int(7);
m[2] = x; // works assigns pointer-to-int value to a pointer-to-int value
现在您必须记住delete
之前map
中的每个元素
它超出了范围,否则你会泄漏内存。
将值存储在map
中,或者如果您确实需要,则更为明智
存储指针以存储合适的智能指针(shared_ptr
或
unique_ptr
)。
打印:
m[2]; // returns pointer value
*m[2]; // dereferences said pointer value and gives you the value that is being pointed to