gpt4 book ai didi

C++ 指针数组

转载 作者:太空狗 更新时间:2023-10-29 23:45:33 25 4
gpt4 key购买 nike

我只是有一个关于指针数组的基本问题。

int *Arr[8]; // An array of int pointers

int (*Arr)[8]; // A pointer pointing to an int array

如果我使用第二个,我如何将整数分配给数组?我知道如果我们在堆上

int *Arr = new int[8]

我可以做 Arr[5] = 99。我该怎么做?

非常感谢您的帮助。

最佳答案

鉴于此声明:

int (*Arr)[8];

你可以给它分配一个大小为 8 的 int 数组的地址:

int data[8];
Arr = &data;

可以通过Arr修改data:

(*Arr)[i] = value;

请注意 *Arr 周围的括号。他们需要在 Arr 对其应用索引之前取消引用,因为索引 [] 运算符具有更高的优先级。

这里要理解的重要一点是data 不是动态分配的。如果在它超出范围后保留它的地址,您将得到一个悬空指针(指向不再存在的东西的指针。)

要动态分配数组并将其分配给 Arr,您可以对 new 的结果使用类型转换,如下所示:

int (*Arr)[8] = reinterpret_cast<int(*)[8]>(new int[8]);

(可以在 ideone 上找到一个工作示例。)

当然,以这种迂回的方式执行此操作没有多大意义,因为您可以:

int* Arr = new int[8];

当然你可以使用 std::vector相反,完全避免手动内存管理:

std::vector<int> Arr;

它为您提供了一个根据需要自行增长的数组。

关于C++ 指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902207/

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