C语言中,a=*p++什么意思?

如题所述

根据运算符的优先级问题:a=*p++的意思是先将指针变量p指向的数据赋值给a,在将指针变量p加1.
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-17
这涉及到两个知识点:指针和自加运算符作为前缀和后缀运算符的区别。
为了具体分析,简单的写如下程序:
#include

//自定一个结构体。指向结构体中的变量是指针用的最多的场合,有典型意义
struct
node
{int
a;};
main()
{
//结构体数组
array
struct
node
array[4]={{0},{1},{2},{3}};
//结构体指针
p
struct
node
*p=array;
printf("%d\n",(++p)
->a);
printf("%d\n",(p++)->a);
}
运行结果为:
1
1
运行结构分析:
指针初始时指针结构体数组
array的第0个元素
,即
p->a=array[0].a=0
语句(++p)
->a
,由于是自加运算作为前缀,要在【执行这条语句时】
p先加一,
即指针p指向了
array的第1个元素array[1],输出结构为1.【执行完这条语句
】p
指向了array[1]。
语句(p++)->a,由于是自加运算符作为后缀,【执行语句时】指针本身不加一,依然指向
array的第1个元素array[1],],(p++)->a=array[1].a=1。.【执行完这条语句

p
才加一,指向
arry的第2个元素array[2].
总结:
自加运算符作为前缀运算符,执行所在语句时变量就已经加一。
自加运算符作为后缀运算符,执行完所在语句时变量才加一。
第2个回答  2020-03-18
*与++都是同级单目运算,所以他们的运算顺序由结合方向决定的,他们具有自右向左的顺序,
a=*p++
的意思是先将指针变量p指向的数据赋值给a
,然后
在将指针变量p加1,即指向下一个数据
第3个回答  2020-03-20
把p中的内容送入寄存器(实际上是个地址),然后p自增1,再通过寄存器中的地址寻址到内存中的值赋给a
问题的关键在于++运算符的优先级比*的优先级要高,由于是后++,所以a得到的是p自增之前指向的内存中的值
第4个回答  2020-03-27
你好,可以这么理解:
p
是一个指针变量,他所指向的变量的类型与
a
的类型一致。
p
指针指向的变量值是多少,那么
a
就等于该值。
之后
p
指针指向的那个变量值自加
1.
注意:变量
++
这种格式的表达式值是变量值本身,赋值之后变量值才自加
1.本回答被提问者采纳
相似回答