所以我是C语言的新手,并用指针测试了一些东西,并且对以下printf有疑问:
npm run watch
所以按照我的“知识”,它会变成这样:
指针指向值“ e”。 然后,如果我执行第一个printf,则首先执行的是()中的命令,因此取消了对指针* ptr的引用,因为它比“前缀增量”具有更高的优先级。现在我想的是,++的行为将类似于(* ptr +1),因为指针已经被取消引用,并且会增加指针所指向的值,但不会更改指针本身。因此它将是“ f”。
但是现在当我运行第二个printf时,它显示出指针仍然指向'f'并且没有“返回”到'e'。
我的想法有误吗?还是还有其他我没有考虑的东西?
答案 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
字符并将其打印为f
(e
+ 1
= f
)
由于printf("%c\n", *ptr);
的值已随f
更改,因此e
语句仅在指向的字符(及其指向++(*ptr)
)处打印。