【发布时间】:2021-05-22 15:46:15
【问题描述】:
我正在尝试反转我的二维数组,我的这段代码有两个函数,第一个创建一个行和列的随机矩阵,第二个必须反转它,但我不太明白我在做什么那里做错了,因为最后它只打印了一行数字。示例:矩阵中的最后一个数字是 12,所以它打印我:“0 12 0”
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int ar[100][100];
void create_mat(int a)
{
srand(time(NULL));
for (int i=0; i<a; i++)
{
printf("\n");
for (int j=0; j<a; j++)
{
ar[a][a]=rand()%15+1;
printf("%d\t", ar[a][a]);
}
}
}
void reverse_mat(int a)
{
printf("\nReversed: ");
for (int i=0; i<a/2; i++)
{
printf("\n");
for (int j=0; j<a; j++)
{
int temp = ar[a][a];
ar[a][a]=ar[a-i-1][a];
ar[a-i-1][a]=temp;
printf("%d\t", ar[a][a]);
}
}
}
int main()
{
int (*funcptr)(int);
int (*rev)(int);
funcptr = &create_mat;
rev = &reverse_mat;
int a;
printf("Introduce the number of rows and columns: ");
scanf("%d", &a);
funcptr(a);
rev(a);
return 0;
}
【问题讨论】:
-
你为什么要用函数指针把它复杂化?
-
如果您只打印
ar[a][a],而a永远不会改变,您为什么要打印整个内容? -
请注意,函数指针变量与您分配给它们的函数不匹配。
-
还可以考虑类似
ar[a][a]=rand()%15+1;... 尝试向您的rubber duck 解释它(以及它所在的循环)。尤其是索引。 -
请将您的代码转换为最小完整可验证示例。删除对您的问题不必要的内容。在这种情况下,函数指针、用户输入 (scanf) 和随机值并不是手头问题的组成部分,而是在查找问题时需要做更多工作。
标签: c for-loop multidimensional-array reverse function-definition