北有樵先生 发表于 2020-2-28 11:08:58

求助二维数组指针移动的问题

#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取余后就该换行。求解答

北有樵先生 发表于 2020-2-28 11:10:11

我自己想的是那个if语句中的4被编译器转成了4*4, 不知道这样理解算不算对

qiuyouzhi 发表于 2020-2-28 11:33:08

因为这个数组的长度就是4,所以如果可以整除4就代表
已经到结尾了,所以要换行
如果有帮助,请设最佳答案{:10_254:}

qiuyouzhi 发表于 2020-2-28 11:45:47

北有樵先生 发表于 2020-2-28 11:10
我自己想的是那个if语句中的4被编译器转成了4*4, 不知道这样理解算不算对

并不是,只是代表了一行,如果到底了就换行

北有樵先生 发表于 2020-2-28 11:46:59

我刚才想了想,p= a 表示的是0行0列元素的地址,p+1 = a+1 ,这表示的是0行1列元素的地址,所以( p - a )%4 == 0 表示当 p自加到 a + 4 时,( p - a )%4 == 0 表该换行了

北有樵先生 发表于 2020-2-28 11:49:04

qiuyouzhi 发表于 2020-2-28 11:33
因为这个数组的长度就是4,所以如果可以整除4就代表
已经到结尾了,所以要换行
如果有帮助,请设最佳答案 ...

可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了 {:10_269:}

qiuyouzhi 发表于 2020-2-28 11:50:01

北有樵先生 发表于 2020-2-28 11:49
可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了

呃呃呃
那你现在还有哪里不懂?

qiuyouzhi 发表于 2020-2-28 11:53:27

北有樵先生 发表于 2020-2-28 11:49
可能你没理解到我的问题,我是把a+1 - a 直接当地址计算了, 现在想明白了

如果没有就把问题改成已经解决
或者设个最佳答案吧

北有樵先生 发表于 2020-2-28 11:56:47

qiuyouzhi 发表于 2020-2-28 11:53
如果没有就把问题改成已经解决
或者设个最佳答案吧

已经解决在那里改?

qiuyouzhi 发表于 2020-2-28 11:57:35

北有樵先生 发表于 2020-2-28 11:56
已经解决在那里改?

编辑帖子那里
页: [1]
查看完整版本: 求助二维数组指针移动的问题