将数组的数组传递给函数
Passing array of Arrays to a function
我试图将数组的数组传递给一个函数,但我没有得到正确的结果。为此,我查看了 [this SO post][1]。我没有收到任何警告,我正在使用 TDM GCC 64 编译器。此代码可能有什么问题?
#include <stdio.h>
#include<inttypes.h>
void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arraOfArray[][numColumns]);
int main(void)
{
int numRows, numColumns, rowCount, colCount, first[5][5];
printf("Enter the number of rows and columns of matrix\n");
scanf("%d%d", &numRows, &numColumns);
printf("Enter the elements of first matrix\n");
for (rowCount = 0; rowCount < numRows; rowCount++)
{
for (colCount = 0; colCount < numColumns; colCount++)
{
scanf("%d", &first[rowCount][colCount]);
}
}
for (rowCount = 0; rowCount < numRows; rowCount++)
{
for (colCount = 0 ; colCount < numColumns; colCount++)
{
printf("%d\t",first[rowCount][colCount]);
}
printf("\n\n");
}
printf("\n");
printArrayOfArrays(numRows,numColumns,first);
return(0);
}
void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arrayOfArray[numRows][numColumns])
{
for (uint8_t rowCount = 0; rowCount < numRows; rowCount++)
{
for (uint8_t colCount = 0 ; colCount < numColumns; colCount++)
{
printf("%d\t", *(*(arrayOfArray+rowCount)+colCount));
}
printf("\n");
}
}
我得到的结果是
Enter the number of rows and columns of matrix
2
2
Enter the elements of first matrix
4
3
1
6
4 3
1 6
4 3
0 0
您是否尝试使用其他语法访问这些值,例如:
printf("%d\t", arrayOfArray[numRow][numColumn]));
这对我来说是显而易见的方式,但也许我没理解问题
main
中的first
和printArrayOfArrays
中的arrayOfArrays
的数组定义不一致:first
是一个5×5的数组,即使如果您不使用或初始化所有元素; arrayOfArrays
是一个变长数组,在你的例子中是 2×2。
所以你也应该将 first
设为可变长度数组:
printf("Enter the number of rows and columns of matrix\n");
scanf("%d%d", &numRows, &numColumns);
int first[numRows][numColumns];
(请确保仅在 numRows
和 numColumns
具有有意义的值后才定义它。)
或者您可以将函数的参数设为 5×5 的固定大小数组:
void printArrayOfArrays(uint8_t numRows, uint8_t numColumns,
int arrayOfArray[5][5]);
(在这种情况下,您必须确保numRows
和numColumns
不超过5。)
我试图将数组的数组传递给一个函数,但我没有得到正确的结果。为此,我查看了 [this SO post][1]。我没有收到任何警告,我正在使用 TDM GCC 64 编译器。此代码可能有什么问题?
#include <stdio.h>
#include<inttypes.h>
void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arraOfArray[][numColumns]);
int main(void)
{
int numRows, numColumns, rowCount, colCount, first[5][5];
printf("Enter the number of rows and columns of matrix\n");
scanf("%d%d", &numRows, &numColumns);
printf("Enter the elements of first matrix\n");
for (rowCount = 0; rowCount < numRows; rowCount++)
{
for (colCount = 0; colCount < numColumns; colCount++)
{
scanf("%d", &first[rowCount][colCount]);
}
}
for (rowCount = 0; rowCount < numRows; rowCount++)
{
for (colCount = 0 ; colCount < numColumns; colCount++)
{
printf("%d\t",first[rowCount][colCount]);
}
printf("\n\n");
}
printf("\n");
printArrayOfArrays(numRows,numColumns,first);
return(0);
}
void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arrayOfArray[numRows][numColumns])
{
for (uint8_t rowCount = 0; rowCount < numRows; rowCount++)
{
for (uint8_t colCount = 0 ; colCount < numColumns; colCount++)
{
printf("%d\t", *(*(arrayOfArray+rowCount)+colCount));
}
printf("\n");
}
}
我得到的结果是
Enter the number of rows and columns of matrix
2
2
Enter the elements of first matrix
4
3
1
6
4 3
1 6
4 3
0 0
您是否尝试使用其他语法访问这些值,例如:
printf("%d\t", arrayOfArray[numRow][numColumn]));
这对我来说是显而易见的方式,但也许我没理解问题
main
中的first
和printArrayOfArrays
中的arrayOfArrays
的数组定义不一致:first
是一个5×5的数组,即使如果您不使用或初始化所有元素; arrayOfArrays
是一个变长数组,在你的例子中是 2×2。
所以你也应该将 first
设为可变长度数组:
printf("Enter the number of rows and columns of matrix\n");
scanf("%d%d", &numRows, &numColumns);
int first[numRows][numColumns];
(请确保仅在 numRows
和 numColumns
具有有意义的值后才定义它。)
或者您可以将函数的参数设为 5×5 的固定大小数组:
void printArrayOfArrays(uint8_t numRows, uint8_t numColumns,
int arrayOfArray[5][5]);
(在这种情况下,您必须确保numRows
和numColumns
不超过5。)