困惑:指向动态数组语法的指针

Confused: Pointers to Dynamic Arrays Syntax

本文关键字:语法 指针 数组 动态 困惑      更新时间:2023-10-16
int* p_bob = new int;
*p_bob = 78;

上面的代码对我来说很有意义。 我使用取消引用操作来分配新内存并分配值 78。

int* p_dynint = new int[10];
*p_dynint[2] = 12;

然而,这没有意义。 如果我尝试在 p_dynint[] 上使用取消引用运算符,则会出现错误。 为什么数组会有所不同?

*p_bob = 78;这会

将值78分配给p_bob指向的内存(表示int)。

p_dynint[2] = 12;只是访问第三个元素。

p_dynint[2]实际上等同于*(p_dynint+2)

p_dynint[2]等效于*(p_dynint + 2)。去引用隐含在[]运算符中。

这样做没有真正的问题:

int* p_dynint=new int[10];
//write first element
*p_dynint=10;
//write second element
*(p_dynint+1)=20;
//write three elements to std::cout
std::cout<<p_dynint[0]<<p_dynint[1]<<p_dynint[10]<<std::endl;

此示例还突出显示了数组的问题。你可以读写任何东西p_dynint[10]生成的输出是一个 int,但它的值只是接下来转换为 int 的几个字节。

如果可能,请使用容器(有关进一步推理,请阅读此内容)