关于c语言结构指针的问题,*p++->s取出的我觉得是个数组,但实际是个字符

struct {
        int k;
        char s[30];
    } a[5] = { 1, "ABC", 2, "abc" }, * p = a;
    printf("%c", *p++->s);

1、请问这个的结果为什么是'A'啊,而且用%s输出还会报错;
2、而且p指针取地址后不应该是a[0]吗?而a[0]不是指针,所以不应该是*p.s吗?为什么不是指针却能用->符号呢?
3、如第1个问题,s明明是个字符串数组,结果为什么不是”ABC"呢?

    struct {
        int k;
        char s[30];
    } a[5] = { 1, "ABC", 2, "abc" }, * p = a;
    printf("%s", p++->s);

p表示是这个地址所指向的值,也就是说p++->s表示的是a[0].s[0],你用%s肯定是报错的啊