第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].
总结:
自加运算符作为前缀运算符,执行所在语句时变量就已经加一。
自加运算符作为后缀运算符,执行完所在语句时变量才加一。