gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:38:03 24 4
gpt4 key购买 nike

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

到目前为止我有

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com