求助二维数组指针移动的问题
#include <stdio.h>int main()
{
int *p ;
int a = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
} ;
for ( p = a ; p < a+12; p++ )
{
if ( ( p - a )%4 == 0)
{
printf ("\n") ;
}
printf ("%4d",*p) ;
}
return 0;
}
那个if语句的作用是换行,但我不明白的是:明明是整型,指针移动一个元素就在地址上+4,对4取余后就该换行。求解答
我自己想的是那个if语句中的4被编译器转成了4*4, 不知道这样理解算不算对 因为这个数组的长度就是4,所以如果可以整除4就代表
已经到结尾了,所以要换行
如果有帮助,请设最佳答案{:10_254:} 北有樵先生 发表于 2020-2-28 11:10
我自己想的是那个if语句中的4被编译器转成了4*4, 不知道这样理解算不算对
并不是,只是代表了一行,如果到底了就换行 我刚才想了想,p= a 表示的是0行0列元素的地址,p+1 = a+1 ,这表示的是0行1列元素的地址,所以( p - a )%4 == 0 表示当 p自加到 a + 4 时,( p - a )%4 == 0 表该换行了
qiuyouzhi 发表于 2020-2-28 11:33
因为这个数组的长度就是4,所以如果可以整除4就代表
已经到结尾了,所以要换行
如果有帮助,请设最佳答案 ...
可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了 {:10_269:} 北有樵先生 发表于 2020-2-28 11:49
可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了
呃呃呃
那你现在还有哪里不懂? 北有樵先生 发表于 2020-2-28 11:49
可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了
如果没有就把问题改成已经解决
或者设个最佳答案吧 qiuyouzhi 发表于 2020-2-28 11:53
如果没有就把问题改成已经解决
或者设个最佳答案吧
已经解决在那里改? 北有樵先生 发表于 2020-2-28 11:56
已经解决在那里改?
编辑帖子那里
页:
[1]