用指针输出二维数组
#include
int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int* p;
for(p=a[0];p<12+a[0];p++){
if((p-a[0])%4==0) printf("\n");
printf("%4d",*p);
}
printf("\n");
return 0;
}
以上程序的运行结果为:
1 3 5 7
9 11 13 15
17 19 21 23
程序没有错。
我的疑问是:
1、假设a[0]地址为236,指针p的初值则为236,因为每个int数据占两个内存空间,则a[1]地址为238。p==236时,输出*p(a[0])后,p自增一(p++),到下一个循环时,指针p的值应该为237,与a[1]的地址值238不等,那为何地址不等输出的结果是一样的,正确的?
2、对于输出换行“if((p-a[0])%4==0) printf("\n");”,每个int数据占两个内存空间,则每输出两个数据(如:a[0]和a[1])后,就应该进行一次换行,而不是输出4个数据换一次行,因为p=240,,p-a[0]=240-236=4,&#x