if ((p-a[0])%4==0) printf("\n")为什么这个是代表输出4个数后换行,不是移动了一个地址就加了4吗(vc++)

#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<a[0]+12;p++)
{if ((p-a[0])%4==0) printf("\n");
printf("%4d",*p);
}
printf("\n");
return 0;
}

对指针做加减法不是固定加4减4的,得看指针所指向的类型,看例子:
int *p; // p = 0x22ff0c
p + 1; // p + 1 = 0x22ff10

地址是加4了,但是用的是+1
(p+1) - p得到的结果是1,而不是4
指针的减法减的不是地址,而是相差多少个元素。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-30
p++并不是地址值加1而是加了你int类型的长度。你用的是int型 也就是说p++,p指向数组中的下一个元素,而不是你想的int型占四个字节,p+4才指向下一个元素,你可以调试一下 看看p的变化就明白了·
第2个回答  2012-12-03

执行p+1后,p的实际值加了4,但是p只是加了1,所以p-a[0]=1,不等于4。

来自:求助得到的回答
第2个回答  2012-12-03
{if ((p-a[0])%4==0) printf("\n");当被4整除时换行
相似回答