为什么++(* ptr)递增指针?

时间:2019-05-10 15:20:25

标签: c pointers pre-increment

所以我是C语言的新手,并用指针测试了一些东西,并且对以下printf有疑问:

npm run watch

所以按照我的“知识”,它会变成这样:

指针指向值“ e”。 然后,如果我执行第一个printf,则首先执行的是()中的命令,因此取消了对指针* ptr的引用,因为它比“前缀增量”具有更高的优先级。现在我想的是,++的行为将类似于(* ptr +1),因为指针已经被取消引用,并且会增加指针所指向的值,但不会更改指针本身。因此它将是“ f”。

但是现在当我运行第二个printf时,它显示出指针仍然指向'f'并且没有“返回”到'e'。

我的想法有误吗?还是还有其他我没有考虑的东西?

2 个答案:

答案 0 :(得分:0)

您缺少该部分,指针指向一个地址,前缀++运算符会更改操作数的值。

  

++的行为类似于(* ptr +1)

否,它的作用类似于*ptr = (*ptr + 1)

因此,(*ptr)得到e的值(如预期的那样),然后通过应用++,该值被递增并存储到相同的存储位置。

  • 前缀增量运算符的结果是新值,该新值作为printf()的参数传递-它打印该值。

  • 对于第二个printf()语句,您已经在打印增量值。

相关内容,引用了C11,第6.5.3.1章

  

前缀++运算符的操作数的值增加。结果是递增后操作数的新值。表达式++E等效于(E+=1)。[...]

答案 1 :(得分:0)

char *ptr = &txt[9];指向txt,但从e字符开始。

printf("%c\n", ++(*ptr));语句首先增加e字符并将其打印为fe + 1 = f

由于printf("%c\n", *ptr);的值已随f更改,因此e语句仅在指向的字符(及其指向++(*ptr))处打印。