我无法理解发生了什么。我创建了下面这个帖子矩阵:Function to dynamically allocate matrix打印具有分离功能的动态二维矩阵
要打印的矩阵,我创造了这个功能:
void PrintMatrix(uint8_t *matrix, size_t nrows, size_t ncols)
{
// Prints matrix
size_t i, j;
printf("\n");
for (i = 0; i < nrows; ++i)
{
for (j = 0; j < ncols ; ++j)
{
printf("%" PRIu8 "\t", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
此功能会导致编译错误:
error: subscripted value is neither array nor pointer nor vector
printf("%" PRIu8 "\t", matrix[i][j]);
为了检查函数,我复制main()内的代码并运行它,令人惊讶的没有任何问题,所以,为什么它作为一个分离的函数运行时不起作用?
。在你的代码没有2D阵列(又名矩阵)。而C不支持_vectors_。这是C++吗? – Olaf
@Olaf。这是一个用malloc动态分配的2D矩阵(我不知道这是否被称为2D矩阵)。是的,这是C. –
1)C没有“矩阵”。 2)矩阵总是二维的。 3)矩阵的C等价物是二维数组。 4)你的代码不包含2D数组,而是一个1D数组(指向第一个元素的指针)。你如何分配数组不会改变使用的类型。你可以很好地用'malloc'分配任意大小的二维数组。但是你需要正确的类型。指向指针的指针是一个非常不同的数据结构。 5)不遵循以下语言规则不会影响它。 C不是非常类型安全的,但仍有一些规则需要遵循。 6)如果你想要一个矩阵,使用一个二维数组。 – Olaf