为什么编译运行的结果和调试的结果不一样,编译运行的结果是3,1 ,调试的结果是2,5.还有printf时为什么前面的那个(++p)->a不用加“*”,后边的那个却要加“*”

#include <stdio.h>



struct ks


{
    int a;
    int *b;
}s[4],*p; 

void main()


{
    int n=1,i;
    for(i=1;i<4;i++)
    {
        s[i].a=n;
        s[i].b=&s[i].a;
        n+=2;
    }
    p=&s[0];
    p++;
    printf("%d,%d\n",(++p)->a,*p->b);
}

我这边得到的结果是3,1,编译运行和调试结果一样。

img

(++p)->a不用加“*”,因为a是int类型。
p->b加“*”,因为b是int*类型,它是一个指针变量,保存的是地址。访问该地址上保存的值就要加“*”。

第一个数不可能会出现2 啊,n从1开始,每次+2,所以s[i].a都是奇数,不可能是偶数。
输出结果是3,3才对啊(可能部分编译器输出的是3,1,不同编译器有些差别)

img