所以,我有一些指针问题。 我正在编写一个在[]中存储内存地址的函数。 这些内存地址指向b []中的实际数据值。 我无法从b获取内存地址存储在。
中// Assume these are initialized to 0 outside of this snippet
char a[100];
char b[100];
b[0] = 42; // Some value for us to use
int* a_ptr = (int*)&a[0]; // Store the address of a[0] in a_ptr
int* b_ptr = (int*)&b[0]; // Store the address of b[0] in b_ptr
*a_ptr = (int)&b_ptr; // PROBLEM LINE. The first four bytes of a[]
// should contain the memory address of b[0].
// However, it does not. Here are the debugger values:
// a_ptr = 0x00429148
// b_ptr = 0x00429151
// a[0] SHOULD be 0x00429151, but it is instead 0x0012fe4c.
我需要做些什么才能让0x00429151存储在[0..3]?
答案 0 :(得分:4)
*a_ptr = (int) b_ptr;
根据评论更新
答案 1 :(得分:0)
没关系......显然为时已晚。
要解决,请更改
*a_ptr = (int)&b_ptr;
到
*a_ptr = (int)b_ptr;
答案 2 :(得分:0)
Yikes - 多么糟糕。如果a和b是char数组,那么你不想为它们创建int ... int是一个比char更大的内存区域,当你读到它时你会在旁边拾取其他值char并最终得到一个有效的随机值。如果你试图存储到int ,你将破坏char的值(可能带有非预期的值),同时破坏它周围的几个值。
在学习C ++时,不要使用C风格的强制转换(例如“(int *)”)是个好主意。如果你使用static_cast<>编译器可以告诉你何时犯了大错。
所以,你想要的是:
char* p_a = &a[0]; char* p_b = &b[0]; *p_a = *p_b; // copy
答案 3 :(得分:0)
虽然有更好的方法可以做到这一点,但这可能是最接近你的方法
int main(){
char *a[100]; // not char but char *
char b[100];
b[0] = 42; // Some value for us to use
char** a_ptr = (char **)&a[0]; // Store the address of a[0] in a_ptr
char* b_ptr = (char*)&b[0]; // Store the address of b[0] in b_ptr
*a_ptr = b_ptr;
}