- ベストアンサー
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次元配列を使用しないといけないのですが・・・。 すみませんが、できれば至急、ご指導、ソースコードの模範解答のほう、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「配列の宣言をせずに(二次元配列も使わずに)、別の動作で同じ実行結果を得る」だけなら、これでもいいわけで。 #include<stdio.h> int main() { puts("2013\nmic\nmatsu\ntest"); /* 本来は,mainがint型なのだから、戻り値としてint型の値が必要 */ /* 指定されていないので、元の「一致」させることができないかも */ return; /* return 0 ; */ /* このように戻り値は指定したい */ }
その他の回答 (4)
一次元配列を二次元配列であるかのように扱うと #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)
「配列の宣言をしない」と「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; } 配列の「宣言」はしてないよ, 「宣言」は.
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
#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)
質問の意味がよくわかりません。 「配列の宣言をせずに~」とあるのに「2次元配列を使用しないといけない」というのが 矛盾してますけど。
補足
すいません、間違えました。 2次元配列を使わずにの間違いでした。 申し訳ありません。よろしくお願いします。