此问题不是重复的问题。在上面链接的问题中我没有找到解决方案
使用void *指针,我编写了一个函数,该函数可以打印出任何数据类型的数组的元素。基本上,它接受作为参数:
void printArray (void* pointer, int width, int numberOfElements, void (*functionPointer)(const void*))
{
for (int i = 0; i < numberOfElements; i++)
{
functionPointer ((void*)(pointer + width*i));
}
}
然后,我创建了不同的函数,这些函数可以打印出一个变量。在这里,其中之一:
void printInt (const void* v)
{
int* myInt = (int*) v;
printf ("%d ", *myInt);
}
剩下要做的就是将要使用的打印函数的名称传递给printArray(),以便它可以是通用的。下面是一个示例:
int tempArray [] = {0,1,2};
printArray (tempArray, sizeof (int), 3, printInt);
为了打印2d数组,我考虑将“ printArray”函数放在for循环中,考虑矩阵的每一行都像单个数组一样。为此,我创建了此函数,将void *指针更改为void **指针,并将存储元素数的变量替换为矩阵的行数和列数:
void printMatrix (void** pointer, int width, int rows, int cols, void (*functionPointer)(const void* v))
{
for (int i = 0; i < rows; i++)
{
printArray ((pointer + i*width), width, cols, functionPointer);
printf ("\n");
}
}
这里,主要功能:
#include <stdio.h>
#define ROWS 8
#define COLS 3
int main ()
{
int matrix [ROWS][COLS] = {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{0, 3, 6},
{1, 4, 7},
{2, 5, 8},
{0, 4, 8},
{2, 4, 6}
};
printMatrix (matrix, sizeof (int), ROWS, COLS, printInt);
return EXIT_SUCCESS;
}
输出:
0 1 2
4 5 6
8 0 3
1 4 7
5 8 0
8 2 4
57 8 2
0 2 0
我试图了解问题出在哪里。 我该怎么解决?
编辑
首先,感谢大家的回答。我解决了用以下方式用pointer + i*width
替换printArray ((pointer + i*width), width, cols, functionPointer);
中的pointer + i*cols
的问题:
for (int i = 0; i < rows; i++)
{
printArray ((pointer + i*cols), width, cols, functionPointer);
printf ("\n");
}
printMatrix()函数现在可以正常工作。