繁体   English   中英

为什么复合赋值或迭代运算符不对解除引用的指针起作用

[英]Why don't compound assignment or iterative operators work on dereferenced pointers

如果要增加引用int位置的指针,则不能使用以下方法:

 *Pntr +=1;
 *Pntr++;

但是,使用此方法不会有任何问题:

 *Pntr = *Pntr + 1;

正在发生的事情导致这些速记方法不起作用。 (还必须指出,我使用的是Visual Studio,有时它的行为很怪异,所以我想我应该提一下)

*Pntr +=1;

这将增加指针指向的值。

*Pntr++;

这与:

*(Pntr++);

这将增加指针,取消引用指针的原始值并丢弃检索到的值。

 *Pntr = *Pntr + 1;

就像第一行一样,它增加了指针指向的值。

如果我想增加与真实引用一个int的位置的指针 ...... [强调]

请注意,当您增加一个指针时, 它会以该指针可以指向的对象大小的步长递增

既然您提到-

使用此方法没有问题:

*Pntr = *Pntr + 1;

因此,您似乎想将Pntr指向的Pntr的值增加1

后缀++运算符的优先级高于一元*运算符(检查运算符优先级表)。 所以,表达

*Pntr++;

将被评估为

*(Pntr++);

这将使指针Pntr移动int的大小,然后取消对其的引用。
要增加指针的值,可以执行以下操作:

(*Pntr)++;

您还可以使用前缀++运算符:

++*Pntr;

表达方式

*Pntr +=1;

与...相同

*Pntr = *Pntr + 1;

并且两者都会使Pntr指向的位置的值增加1

暂无
暂无

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

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