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

标签 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 数组,所以我确定我需要转换一些东西。
任何帮助都会很好。

最佳答案

您不能将 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/

相关文章:

pointers - UnsafeMutablePointer<Int8> 来自 Swift 中的字符串

c++ - 如何显式编写数组引用返回类型?

c++ - 从 ubuntu 连接到 Oracle 数据库

c++ - popen 上的死锁

javascript - 数组包含通过引用调用的值,因此它们的指针应该变成相同的值并等于 true

java - 有什么方法可以将 Constants 类中的 Java 常量转换为另一个类中的迭代形式吗?

java - 如何获取数组对象及其索引

c++ - Visual Studio 2005 在编译期间忽略预处理器指令

C++ 赋值,strcpy 和 strlen 与字符数组 n 指针

c++ - 使用 OpenCV 复制指向的对象