int* p_bob = new int;
*p_bob = 78;
上面的代码对我来说很有意义。我使用取消引用操作来分配新内存并分配值 78。
int* p_dynint = new int[10];
*p_dynint[2] = 12;
然而,这没有任何意义。如果我尝试在 p_dynint[] 上使用取消引用运算符,则会收到错误消息。为什么数组会有所不同?
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 的接下来的几个字节。
如果可能的话使用容器(为了进一步推理阅读这个)