C 为什么++;(*ptr)递增指针?
我是C新手,用指针测试了一些东西,我对下面的printf有一个问题:C 为什么++;(*ptr)递增指针?,c,pointers,pre-increment,C,Pointers,Pre Increment,我是C新手,用指针测试了一些东西,我对下面的printf有一个问题: char txt[] = "thisIsAQuestion"; char *ptr = &txt[9]; printf("%c\n", ++(*ptr)); printf("%c\n", *ptr); 所以按照我的“知识”,它会是这样的: 指针指向值“e”。 然后,如果我执行第一个printf,首先执行的是()中的命令,因此取消对指针*ptr的引用,因为它比前缀增量具有更高的优先级。现在我认为,++的行为类似(*pt
char txt[] = "thisIsAQuestion";
char *ptr = &txt[9];
printf("%c\n", ++(*ptr));
printf("%c\n", *ptr);
所以按照我的“知识”,它会是这样的:
指针指向值“e”。
然后,如果我执行第一个printf,首先执行的是()中的命令,因此取消对指针*ptr的引用,因为它比前缀增量具有更高的优先级。现在我认为,++的行为类似(*ptr+1),因为指针已经被取消引用,并增加指针指向的值,但不改变指针本身。所以应该是“f”
但是现在当我运行第二个printf时,它显示指针仍然指向“f”,并且没有“返回”到“e”
我的想法有错误吗?还有什么我没有考虑过的吗? 你错过了一部分,指针指向一个地址,前缀<代码> ++> /Cord>运算符改变操作数的值。< /P> ++将表现为(*ptr+1) 不,它的行为类似于
*ptr=(*ptr+1)
因此,(*ptr)
产生一个值e
,(如预期),然后,通过应用++
,该值递增并存储到相同的内存位置
- prefix increment运算符的结果是新值,该值作为参数传递给
——它打印该值printf()
- 对于第二个
语句,您已经在打印递增的值printf()
C11
前缀++
运算符的操作数值递增。结果是递增后操作数的新值。表达式++E
相当于(E+=1)
[…]
缺少指针指向地址的部分。前缀
++
运算符会更改操作数的值
++将表现为(*ptr+1)
不,它的行为类似于*ptr=(*ptr+1)
因此,(*ptr)
产生一个值e
,(如预期),然后,通过应用++
,该值递增并存储到相同的内存位置
- prefix increment运算符的结果是新值,该值作为参数传递给
——它打印该值printf()
- 对于第二个
语句,您已经在打印递增的值printf()
C11
前缀++
运算符的操作数值递增。结果是递增后操作数的新值。表达式++E
相当于(E+=1)
[…]
char*ptr=&txt[9]
指向txt
,但从e
字符开始
printf(“%c\n”,++(*ptr))代码>语句首先增加e
字符,并将其打印为f
(e
+1
=f
)
以及printf(“%c\n”,*ptr)代码>语句只打印指向的字符(及其f
),因为e
值随+(*ptr)
字符*ptr=&txt[9]而改变
指向txt
,但从e
字符开始
printf(“%c\n”,++(*ptr))代码>语句首先增加e
字符,并将其打印为f
(e
+1
=f
)
以及printf(“%c\n”,*ptr)代码>语句只打印一个指向的字符(及其f
),因为e
值随+(*ptr)
嗯而改变。。。指针不递增。是txt[9]
增加并变成'f'
。您的阵列中不再有'e'
。但是你自己说的。你为什么说指针在递增?ptr
在这个程序中不会改变它的值,除非初始化。它不是关于优先级,而是语法(*ptr)
是指向的对象,并且++(*ptr)
增加该值。++(*ptr)
-通过ptr
获取内存中指向的字符值,并增加该值++ptr
-增量,其中ptr
指向内存中的。实际上,这与指针无关。你不妨问为什么inti=5;printf(“%d\n”,+i);printf(“%d\n”,i)代码>打印6
两次,而不是“返回”到5。嗯。。。指针不递增。是txt[9]
增加并变成'f'
。您的阵列中不再有'e'
。但是你自己说的。你为什么说指针在递增?ptr
在这个程序中不会改变它的值,除非初始化。它不是关于优先级,而是语法(*ptr)
是指向的对象,并且++(*ptr)
增加该值。++(*ptr)
-通过ptr
获取内存中指向的字符值,并增加该值++ptr
-增量,其中ptr
指向内存中的。实际上,这与指针无关。你不妨问为什么inti=5;printf(“%d\n”,+i);printf(“%d\n”,i)代码>打印6
两次,而不是“返回”到5次。@是的,先生,就是这样。:)好的,谢谢你对我这个愚蠢问题的详细解释@(是的,先生,事情就是这样。:)好的,谢谢你对我这个愚蠢问题的详细解释!