わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

2次元配列を仮引数に持つ関数(問題編)

いきなりですが問題です.まず,こちらのソースファイルをご覧ください.

#include <stdio.h>

void print_array(int a[2][3]) /* int **a ではうまくいかない */
{
  int i, j;

  for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
      printf("(%d,%d): %d\n", i, j, a[i][j]);
    }
  }
}

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

  print_array(b);

  return 0;
}

このソースファイルをもとに,あなたが「配列」と「ポインタ」の違いを十分にわかっていることを示すような問題文を作ってください.そして,その問題に対して,答えを与えてください.
例えば

  • 「int a[2][3]」のところを「int **a」に変えると実行結果はどうなるか.

という問題文は,作業すれば終わりなので,配列とポインタの違いがわかる問いとは言えません.一方

  • なぜ「int **a」ではうまくいかないのか.

とした場合,明快な答えが書けますか?