我有一个数组,我想将下一个数组的地址存储在当前位置。
到目前为止我已经
了char *a = new char[50];
char *free = a;
*a = &(a + 1); //value of a[0] is equal to the address of a[1]
我也使用char
阵列,所以我确定我需要投出一些东西。
任何帮助都会很好。
答案 0 :(得分:3)
您无法在char数组中存储char *。
字符等于一个字节。指针的大小(如char *)因计算机而异。在我的电脑上,它的8个字节。 8个字节不能适合1个字节。
#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)。