使用二维数组转换为列主要方式

时间:2017-04-12 04:02:05

标签: c

我正在尝试加载我的矩阵,以便连续的数字将使用指针/寻址方法沿着列向下移动。目前我的程序打印行中的连续数字。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j;
int twodArray[5][5], *twodArrayptr;


int add = 0;

for(i = 0; i < 5; i++)
{
    for(j = 0; j < 5; j++)
    {   
        twodArray[i][j]= (i*5) + j;

    }

}

twodArrayptr = &(twodArray[0][0]);

for(i = 0; i < 5; i++)
{
    for(j = 0; j < 5; j++)
    {
        printf("%d ", *(twodArrayptr +((i*5)+j)));


    }
    printf(" \n");

}
}

2 个答案:

答案 0 :(得分:1)

如果您的要点是load具有相反顺序的矩阵,请使用4py的解决方案,如果您的要点是使用指针按列顺序访问数组,那么您的解决方案就在下面。< / p>

你太紧张了,你的问题就在这里(你有ij互换了。要从行/列主要订单更改,您可以执行以下操作:

    printf (" %2d", *(twodArrayptr + ((j * MAX) + i)));

另请注意,main的类型为int,因此会返回一个值。

把它放在一起,你可以做类似的事情:

#include <stdio.h>

#define MAX 5

int main (void)
{
    int i, j, twodArray[MAX][MAX] = {{0}}, *twodArrayptr = (int *)twodArray;

    for (i = 0; i < MAX; i++) {
        for (j = 0; j < MAX; j++) {
            twodArray[i][j] = (i * MAX) + j;
            printf (" %2d", twodArray[i][j]);
        }
        putchar ('\n');
    }

    putchar ('\n');

    for (i = 0; i < MAX; i++) {
        for (j = 0; j < MAX; j++)
            printf (" %2d", *(twodArrayptr + ((j * MAX) + i)));
        putchar ('\n');
    }

    return 0;
}

示例使用/输出

$./bin/rowcol2d
  0  1  2  3  4
  5  6  7  8  9
 10 11 12 13 14
 15 16 17 18 19
 20 21 22 23 24

  0  5 10 15 20
  1  6 11 16 21
  2  7 12 17 22
  3  8 13 18 23
  4  9 14 19 24

另外注意:,您无需使用可变参数函数 printf输出单个字符使用{{ 1}}代替putchar

答案 1 :(得分:0)

将分配逻辑更改为twodArray[i][j]= (j*5) + i;

像魅力一样。

for(i = 0; i < 5; i++)
{
    for(j = 0; j < 5; j++)
    {   
        twodArray[i][j]= (j*5) + i;

    }

}