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

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

我是C新手,用指针测试了一些东西,我对下面的printf有一个问题:

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()
    语句,您已经在打印递增的值

相关,引用第6.5.3.1章中的
C11

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


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

++将表现为(*ptr+1)

不,它的行为类似于
*ptr=(*ptr+1)

因此,
(*ptr)
产生一个值
e
,(如预期),然后,通过应用
++
,该值递增并存储到相同的内存位置

  • prefix increment运算符的结果是新值,该值作为参数传递给
    printf()
    ——它打印该值

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

相关,引用第6.5.3.1章中的
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次。@是的,先生,就是这样。:)好的,谢谢你对我这个愚蠢问题的详细解释@(是的,先生,事情就是这样。:)好的,谢谢你对我这个愚蠢问题的详细解释!