[英]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.