我正在尝试加载我的矩阵,以便连续的数字将使用指针/寻址方法沿着列向下移动。目前我的程序打印行中的连续数字。
#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");
}
}
答案 0 :(得分:1)
如果您的要点是load
具有相反顺序的矩阵,请使用4py的解决方案,如果您的要点是使用指针按列顺序访问数组,那么您的解决方案就在下面。< / p>
你太紧张了,你的问题就在这里(你有i
和j
互换了。要从行/列主要订单更改,您可以执行以下操作:
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;
}
}