我想创建一个指针数组,每个指针应该保留另一个数组中所有元素的内存地址。但有些事情是错误的。
以下是代码:
int main()
{
int a[] = { 1, 2, 3, 4, 5 };
int *b = new int[sizeof(a)];
for (int i = 0; i < sizeof(a); i++)
{
b = &a[i];
}
std::cout << &b[3] << std::endl;
std::cout << &a[3] << std::endl;
return 0;
}
当我期望是类似的内存地址和值。一切都不一样。
答案 0 :(得分:0)
sizeof(a)
返回a
的 IN BYTES 大小。
要获得元素的数量,您应该将其除以sizeof(int)
。
因此,如果您有5
个元素,那么sizeof(a)
等于5*sizeof(int)
。除以sizeof(int)
(可能会因您正在使用的机器而异),您将拥有确切的元素数量。
我想要分配b[i] = &a[i]
,以便将地址存储在b
的不同元素中。
答案 1 :(得分:0)
我想你想这样做
int main(int argc, char *argv[])
{
int a[] = { 1, 2, 3, 4, 5 };
unsigned max=sizeof(a) / sizeof(a[0]);
int **b = new int*[max];
for (int i = 0; i < max; i++)
{
b[i] = &a[i];
}
unsigned max=sizeof(a) / sizeof(a[0]);
for (int i = 0; i < max; i++)
{
std::cout << "b[" << i << "]:" << *b[i] << std::endl;
std::cout << "a[" << i << "]:" << a[i] << std::endl;
}
delete[] b;
return 0;
}
两个错误。首先,当您声明指针数组时,使用
int **b;
其次,要确定数组的大小,可以使用
sizeof(a) / sizeof(a[0])
但请注意。将数组作为参数传递给函数后,它将不再工作。