• ベストアンサー

C言語 2次元配列で

#include<stdio.h> int main() { char name[4][8]={"2013","mic","matsu","test"}; int i; for(i=0;i<4;i++) { printf("%s\n",name[i]); } return; } をいじって、配列の宣言をせずに、別の動作で同じ実行結果を得るためにはどうすればよいでしょうか? ただし、2次元配列を使用しないといけないのですが・・・。 すみませんが、できれば至急、ご指導、ソースコードの模範解答のほう、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

「配列の宣言をせずに(二次元配列も使わずに)、別の動作で同じ実行結果を得る」だけなら、これでもいいわけで。 #include<stdio.h> int main() { puts("2013\nmic\nmatsu\ntest"); /* 本来は,mainがint型なのだから、戻り値としてint型の値が必要 */ /* 指定されていないので、元の「一致」させることができないかも */ return; /* return 0 ; */ /* このように戻り値は指定したい */ }

その他の回答 (4)

noname#208507
noname#208507
回答No.5

一次元配列を二次元配列であるかのように扱うと #include<stdio.h> #define height 4 #define width 8 #define get(array, x, y) (array[(y * width) + x]) int main(void) {  char name[height * width]={   "2013\0\0\0\0"   "mic\0\0\0\0\0"   "matsu\0\0\0"   "test\0\0\0\0"  };  int i, j;    for (i=0;i<4;i++)  {   for(j=0;j<8;j++)   {    if (get(name,j,i) != '\0') putchar(get(name,j,i));   }   printf("\n");  }  return 0; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

「配列の宣言をしない」と「2次元配列を使用しないといけない」を無理に実現してみる試み #include <stdio.h> int main() { int i; const char (*p)[4][8] = &((const char [4][8]){"2013", "mic", "matsu", "test"}); for (i=0; i<4; ++i) { printf("%s\n", (*p)[i]); } return 0; } 配列の「宣言」はしてないよ, 「宣言」は.

回答No.2

#include <stdio.h> int main() { const char* name[4] = { "2013", "mic", "matsu", "test" }; int i; for ( i = 0; i < 4; i++ ) { printf("%s\n",name[i]); } return 0; }

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.1

質問の意味がよくわかりません。 「配列の宣言をせずに~」とあるのに「2次元配列を使用しないといけない」というのが 矛盾してますけど。

51131226y
質問者

補足

すいません、間違えました。 2次元配列を使わずにの間違いでした。 申し訳ありません。よろしくお願いします。

関連するQ&A