繁体   English   中英

指向指针的指针

[英]Pointer to a pointer

我试图通过指向指针x的指针设置指针p的内存

int *p = 0;
int **x = &p;

*x = new int[2];

*x[0] = 1;  //p[0] = 1
*x[1] = 2;  //p[1] = 2

为什么它会因访问冲突错误而失败?

为什么它会因访问冲突错误而失败?

[]优先于*。 您需要先取消引用x

(*x)[0] = 1;
(*x)[1] = 1;

我认为你的问题是这样的

*x[1]

手段

*(x[1])

并不是

(*x)[1]

第二个版本是你想要的; 它取消引用指针以获取底层数组,然后读取第二个元素。 您现在拥有的代码将双指针视为指向指针数组的第二个元素的指针,查找其中的第一个指针,然后尝试取消引用它。 这不是你想要的,因为指针只指向一个指针而不是两个指针。 明确括起此代码应解决此问题。

在像*A[]这样的表达式中,变量A首先被索引,然后被解引用,而你想要完全相反,所以你需要写(*A)[]

不幸的是,类型安全系统对您没有帮助。

x [0]和x [1]都是int *类型,所以你可以这样做

*(x[0]) = 1;  // allowed
*(x[1]) = 2;  // access violation, not through x[1] itself but by accessing it

你的意图当然是

 (*x)[0] = 1;
 (*x)[1] = 2;

您的问题是您已将p设置为地址0.您实际上没有为p分配任何空间(因此也是x。)因此,您尝试将内存设置为地址0和1.如果将其更改为此,它应该没有错误。

int *p = new int[5];
int **x = &p;

*x = new int[2];

(*x)[0] = 1;  //p[0] = 1
(*x)[1] = 2;  //p[1] = 2

仅供参考,您也可以尝试以这种方式访问x指向的内存位置 -

x[0][0] = 1;
x[0][1] = 2;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM