用指针输出二维数组

NickHdx NickHdx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h>
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,,4%4=0,是否?

求大神指点!!
...全文
评论 15
收藏 已收藏
分享
返回顶部
NickHdx
C语言 70,039 成员 243,237 内容