指向多维数组的指针变量

#include
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p;
for(p=a[0];p<a[0]+12;p++)
{
if((p-a[0])%4==0)
printf("\n");
printf("%4d",*p);
}
}

把for(p=a[0];p<a[0]+12;p++)改成for(p=a[0];p<a+3;p++)为什么是正确的??改为for(p=a[0];p<p+12;p++)为什么是错误的(p不就等于a[0]么)??

指向多维数组的指针变量

1 多维数组的指针
多维数组可以看作是一维数组的延伸,多维数组的内存单元也是连续的内存单元。换句话说,C语言实际上是把多维数组当成一维数组来处理的。下面以二维数组为例说明这个概念。
比如,现在有一个int型的二维数组a[3][4],计算机认为这是一个一维的数组a[3],数组的三个元素分别是a[0],a[1]和a[2]。其中每个元素又是一个一维数组,例......
答案就在这里:指向多维数组的指针变量
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

p=a[0]就是p=*a吧 p=*a=a[0][0]

p=a[0]可见p是行指针,p++就指向下一行,所以只需要加3次。

p<p+12明显是错的,这个条件恒成立,所以是个死循环。