c ++存储数组下一个位置的地址

时间:2015-07-03 02:23:45

标签: c++ arrays pointers

我有一个数组,我想将下一个数组的地址存储在当前位置。

到目前为止我已经

char *a = new char[50];
char *free = a;

*a = &(a + 1); //value of a[0] is equal to the address of a[1] 

我也使用char阵列,所以我确定我需要投出一些东西。
任何帮助都会很好。

1 个答案:

答案 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)。