我有一个数组,我想存储下一个数组在当前位置的地址。
到目前为止我有
char *a = new char[50];
char *free = a;
*a = &(a + 1); //value of a[0] is equal to the address of a[1]
另外,我正在使用 char
数组,所以我确定我需要转换一些东西。
任何帮助都会很好。
最佳答案
您不能将 char* 存储在 char 数组中。
一个字符等于一个字节。指针(例如 char*)的大小因计算机而异。在我的电脑上,它是 8 个字节。 1 个字节放不下 8 个字节。
#include <iostream>
int main()
{
std::cout << "sizeof(char): " << sizeof(char) << std::endl;
std::cout << "sizeof(char*): " << sizeof(char*) << std::endl;
return 0;
}
// Outputs
// sizeof(char): 1
// sizeof(char*): 8
您也无法将 char* 转换为 char 以使其适合数组,因为您的编译器会对您大喊大叫。
#include <iostream>
int main()
{
char myArray[10];
std::cout << (char)&myArray[0];
}
// Compiler error:
// g++ main.cpp -std=gnu++11
// main.cpp: In function ‘int main()’:
// main.cpp:7:34: error: cast from ‘char*’ to ‘char’ loses precision [-fpermissive]
要使此工作正常进行,您可以做的最接近的事情是使用 size_t 的数组。 size_t 是指针的大小。所以 size_t 和 size_t* 中的字节数相等,因此您可以在转换后将 size_t* 放入 size_t... 的数组中。
#include <iostream>
int main()
{
size_t myArray[10];
myArray[0] = reinterpret_cast<size_t>(&myArray[1]);
std::cout << std::hex << "0x" << myArray[0] << std::endl;
}
// Outputs: 0x7fff4eded5c8
此外,考虑使用 indicies[] 而不是指针加法。它更具可读性,并且在底层做同样的事情。 a[1] == *(a+1).
关于c++存储数组下一个位置的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197500/