C++ 传递结构体指针遍历,数组下标越界,为什么不报错?

typedef struct
{
    int day;
    int month;
    string str_name;
    char desc[16];
}ceshi_t;

void setOsd(ceshi_t *pOsd)
{
   ** for(int osd_i = 0; osd_i < 5; osd_i++)**
    {
            **int day = pOsd[osd_i].day;**
    }
}

int main(void)
{
   ** ceshi_t osd = {0};**
    osd.day = 16;
    setOsd(&osd);
}

这些星号是什么意思啊

指针指向结构体占用内存后的内存了,虽然你只传了一个结构体指针,运行时执行指针+1操作,根据sizeof(ceshi_t)所占内存数量,即(ceshi_t *)+sizeof(ceshi_t),指向当前(ceshi_t *)指针指向地址+sizeof(ceshi_t)后的内存地址。

你没有定义结构体数组,只定义了一个结构体变量,你把它当作数组来访问肯定会越界。