• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 ポインタの問題)

C言語のポインタを使った配列のシャッフルのプログラムを作成する方法

このQ&Aのポイント
  • C言語のポインタを使って配列をシャッフルするプログラムを作成する方法について説明します。
  • プログラミング初心者のため、分かりやすく解説します。
  • シャッフルするためのアルゴリズムや必要なライブラリの使い方も解説します。

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

  • ベストアンサー
回答No.2

んま、これらって、ややこしく考えずに、 紙にだ~~~っと数字がいっぱい書いてあるとして、 その中の、1点に爪楊枝を指しているって 考えてください。 つまようじの、指している数字は p[0] か *p そのつまようじの指している数字の1つ次が、 p[1]なんだ!って覚えればいいんですよ。 なので、カレンダーの、ある日付を指して そこからの前の日?次の日?って考えればそれでいいです。 (それがず~っとつながってる、その中の1点を  あらわしたのがポインタだと思えばOKです!) 暇つぶしにプログラムを勉強した程度の、 飲み屋のおっさんですが^^参考になったら、 こちらは、うれしいかな!そんなとこです! なお、ポインタの前についている「型」は int だったりchar だったりしますが それは、つまようじで刺している先の、大きさだと思えばOKです。 char = 1バイト intはコンパイラによりサイズが違いますが、 一般的には4バイト。 を一組に読み込めってことね!ってな、指示だと覚えれば 以後のテストなどでも、点数取れますよ! ではでは

MAPILONN
質問者

お礼

前回の質問に引き続きありがとうございました! 自分がちょっと難しく考えすぎていたのかな?って部分もあり改めて勉強になりました! 今後これを活かして取り組んでいきたいと思います

その他の回答 (1)

回答No.1

------------------------------- void shuffle(int *values, int n) { // 配列の最後尾から 1 番目の要素までループする (ループ変数を i とする) // 0 以上 i 以下の int 型の乱数を1つ得る (変数 j とする) // 配列の i 番目の要素と j 番目の要素を入れ替える int temp; // こいつがポイント int i,j; for (i=0;i<n;i++) {  j=rand()%n; 0以上~n未満の乱数を取得 // swap i,j temp=values[i]; values[i]=values[j]; values[j]=temp; } // 今回は、iとjを使えとあるので最適化はしていない。 } ------------------------------- void int(int *values, int n) { // 0 〜 n - 1 の昇順の値を持つ配列を作成 int i; for (i=0;i<n;i++) { values[i]=i; } } こっちも、別回答があり*values++=i;でもOK ------------------------------- void print_values(int *values, int n) { int i; for (i=0;i<n;i++) { printf("%d",values[i]); // %d=デシマム値=つまり10進数を表示白って意味 } } ------------------------------- // 別の回答もあります。 // valuesをそもそも破壊していいので(ローカルだから) void print_values(int *values, int n) { // 一行で済んでしまう書き方も可能です。 // さらには、余計な変数を作っていないので、エコでもある。 for (;n;n--) printf("%d",*values++); } ------------------------------- こんなもんで、どうですか?