C- (*ptr)为什么会增加指针



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

char txt[] = "thisIsAQuestion";
char *ptr = &txt[9];
printf("%cn", ++(*ptr));
printf("%cn", *ptr);

因此,遵循我的"知识",它会这样做:

指针指向值" e"。然后,如果我执行第一个printf,则执行的第一件事是在((中的命令,因此指针 *ptr的解释,因为它比前缀增量具有更高的优先级。现在,我认为 的作用将像(*ptr 1(,因为指针已经被删除了,并增加了指针指向的价值,但不会更改指针本身。所以这将是" f"。

但是现在,当我运行第二个printf时,它表明指针仍然指向" f",而没有"返回"到'e'。

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

您错过了零件,指针指向地址前缀++操作员更改操作数的值。

将像(*ptr 1(

一样

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

so,(*ptr)导致e的值(如预期(,然后通过应用++,该值会增加并存储到相同的存储位置中。

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

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

相关,引用C11,第6.5.3.1章

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

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

printf("%cn", ++(*ptr));首先增加e字符并将其打印为f(e 1 = f(

printf("%cn", *ptr);语句只需打印一个字符,其中指向(及其f(,因为e值随++(*ptr)更改。

最新更新