荤菜求助:指向二维数组的指针的问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 13:15:20
用指针变量输出数组元素的值
main()
{static int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int *p;
for(p=a[0];p<=*(a+2)+3;p++)
{if((p-a[0])%4==0) /*为什么不能写成if((p-a[0])%8==0)*/
printf("\n");
printf("%4d",*p); /*把*p换成p试试看,再换成a[0]试试看, 然后直接在草稿上(不用换)p-a[0]看看,这就是我为什么写成if((p-a[0])%8==0)的原因*/
}
getch();
}
把printf中的*p换成p,结果是:
404 406 408 410 412 414 416 418 420 422 424 426
把printf中的*p换成a[0],结果是:
404 404 404 404 404 404 404 404 404 404 404 404
因为408-404=4,4%4=0,所以我认为应该在408这个数的位置就应该转向下一行
我认为如果写成if((p-a[0])%4==0),再把*p换成p结果是:
404 406
408 410
412 414
416 418
420 422
424 426
*p没有换成p的结果是
1 3
5 7
9 11
13 15
17 19
21 23
可实际正确的结果是:
404 406 408 410
412 414 416 418
420 422 424 426
*p没有换成p的结果是
1 3 5 7
9 11 13 15
17 19 21 23
我就是不明白正确的结果
请高手指示一下我的思维错在什么地方<

p指针变量开始指向数组的第一个元素,则p+1指向同一数组

中的下个元素,p指向的地址加了2个字节,但自己本身只增加

了1,它是一个指针变量.

实际上[]是变址运算符,p、a[0]进行了变址运算.