C中的指针和二维数组

时间:2018-10-09 15:18:02

标签: c arrays pointers

我知道如何在C中使用一维数组的指针。如下所示: 但是如果我们有二维数组怎么办?我如何通过指针解决它们? 谢谢。

#include <stdio.h>

int main() {
  int dar[4] = {1,2,3,4};

  int *sar = NULL;
  sar = dar;
  for (int i = 0; i < 4; i++) {
    printf("%d ", *(sar + i));
    }
}

3 个答案:

答案 0 :(得分:1)

这也可能有帮助。

  public static Expression<Func<T, bool>> AndIf<T>(this Expression<Func<T, bool>> expr1, bool condition,
                                                         Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());

        if (condition)
            return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
        else
            return expr1;
    }

}

答案 1 :(得分:0)

感谢@Qubit 我解决了问题。我将答案发布给以后参考。

#include <stdio.h>

int main() {
  int dar[2][3] = {{1,2,3},
                   {4,5,6}};

  int *sar = NULL;
  int *bar = NULL;
  sar = dar[0];
  bar = dar[1];

  for (int i = 0; i < 3; i++) {
    printf("%d ", *(sar+i));
   }
  printf("\n");
  for (int j = 0; j < 3; j++) {
    printf("%d ",*(bar+j));
   }

   printf("\n");
}

答案 2 :(得分:0)

2-D数组是...一维数组的一维数组,您可以在两者上使用通用指针算术。

这意味着您可以轻松做到:

#include <stdio.h>

int main() {
  int dar[2][3] = {{1,2,3},
                   {4,5,6}};


  for (int i = 0; i < 2; i++) {
    int *bar = *(dar + i);           // pointer to the row
    for (int j = 0; j < 3; j++) {
      printf("%d ",*(bar+j));        // access the values
     }
     printf("\n");
  }
  printf("\n");
}

之所以有效,是因为dar + i中的dar衰减到了指向其第一行的指针,因此*(dar + 1)(根据定义为dar[i])代表了i-第一行,然后衰减到指向该行第一个元素的指针。


免责声明:这只是JJcopl回答的补充,但内容太丰富,无法放入评论中……