一.首先看p++->,++p->的两组代码运行
第一组:执行结果分别为1 1
分析:
++为前缀表示p先+1,则指针p从指向array【0】到array【1】,故此时p->a为array[1]->a,即为1;
++为后缀,先执行p->a输出后再将指针p后移。由于在上述基础上p已经后移1个了,因此这里的p->a也即array【1】->a,先输出即为1,然后再p指向array【2】。
第二组
将输出顺序换一下更好理解。
结果分别为0 2
分析:
++为后缀,先执行p->a,再将p后移一位。所以先输出p->a即array【0】->a输出0,然后将p指向array【1】。
++为前缀,先将p后移一位,再输出p->a。所以在上述基础上,p此时指向array【2】,再输出p->a即array【2】->a,即输出2。
二.再看(++p)->a和(p++)->a的一组代码的运行
结果分别为0和2
分析:++为后缀,同上理,先执行p->a,再p后移1位,即输出0后p指向array【1】
++为前缀,按理来说这里应该p先移向array【2】再输出p->a,但是这里没有括号,此时->优先级高于++,于是先执行p->a,即array【1】->a,即1,再在此结果(数字1)基础上+1,即输出2.