您好我正在开发一个C程序,该程序声明一个包含N行和M列的二维整数数组,并使用传统的数组元素访问方法加载连续数字。 N和M等于10.我需要使用此函数显示数组的特定行
if let count = filteredCustomReqList?.count {
// count is of type "Int", not "Int?"
for i in 0..<count {
// etc.
然后我需要使用该函数来显示整个数组。 我必须在下面的代码中使用showCol函数做同样的事情。 我的代码中有两个函数,但我对如何实现它们感到困惑。我感谢你们给予的任何帮助。
void showRow(int *arrayName, int rowNumber, int nColsInRow)
答案 0 :(得分:1)
我对showRow函数进行了更改以接受void指针。然后在showRow函数内部我将它转换回2 dim数组。在那之后,你可以像对待任何其他2个昏暗阵列那样回去治疗。
void showRow(void *array, int rowNumber, int nColsInRow)
{
int (*a)[10] = (int (*)[10]) array;
int i;
for (i=0; i < nColsInRow; i++) {
printf("%d\n", a[rowNumber][i]);
}
}
int main()
{
int array[10][10];
int i,j;
int add = 0;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
array[i][j]= add;
add++;
}
}
showRow (&array, 1, 10);
return 0;
}
答案 1 :(得分:0)
不改变函数的签名,请尝试以下代码:
#include <stdio.h>
#include <stdlib.h>
void showRow(int *array, int rowNumber, int nColsInRow);
void showCol(int *array, int colNumber, int nRowsInCol);
int
main(void)
{
int array[10][10];
int i,j;
int *p;
int add = 0;
p = (int *)array; //Set a pointer point to this array.
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
array[i][j]= add;
add++;
}
}
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
printf("%d ", array[i][j]);
}
printf(" \n");
}
showRow( p, 2, 3);
showCol( p, 2, 3);
}
void showRow(int *array, int rowNumber, int nColsInRow)
{
int *row = &array[rowNumber*10];//row points at the particular row.
int j;
for(j = 0; j < 10; j++)
{
printf(" %d", row[j]);
}
printf("\n%d\n", row[nColsInRow]);
}
void showCol(int *array, int colNumber, int nRowsInCol)
{
int *col = &array[colNumber]; //col points at the particular col of first row.
int j, n;
for(j = 0; j < 100; j = j + 10) //Increment 10 since row size is 10.
{
printf(" %d", col[j]);
}
n = 10 * nRowsInCol;
printf( "\n%d\n", col[n]);
}
说明:整数数组存储在连续内存中。 在这种情况下,虽然它是一个二维数组, 它以100个连续的4字节为单位存储。 (假设 你的计算机中int的大小是4。)
使用int指针,它可以指向任何索引。
e.g。 int * p =&amp; array [58]; p指向该阵列的第58个单位。 使用这个概念,现在你可以做数学 特定的行或列。