使用指针和寻址技术显示数组的特定行

时间:2017-04-13 03:03:21

标签: c arrays data-structures

您好我正在开发一个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)

2 个答案:

答案 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个单位。        使用这个概念,现在你可以做数学        特定的行或列。