使用*(*p+3*i+j)的方式输出指针数组时遇到的问题

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

#include

int main(int argc, char** argv){
    int a[3]={1,2,3};
    int b[3]={4,5,6};
    int c[3]={7,8,9};
    int* p[3]={a,b,c};
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++)
            printf("%d  ",*(*p+3*i+j));
        printf("\n");
    }
}
运行结果及详细报错内容

运行结果如下

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

使用过调试,但是也没有分析出原因
更改过打印方式,*(p+3i+j)改成p[3][3]
结果正确

我想要达到的结果

展示代码里的*(p+3i+j)应该原理是正确的,但不明白具体逻辑错哪了?

应该是

printf("%d  ",*(*(p+i)+j));