• ベストアンサー

C言語で質問です。

C言語で質問です。 行列の計算で12行12列の行列の計算をしなければいけないのですが、 あらかじめ行列に文字や値を代入するときに同じ値の成分を簡単に代入する方法 はないのでしょうか? 例えば 「A[0][5]~A[0][12] はすべて0」「A[1][2]~A[1][8]はすべて1」のように まとめて代入する方法を教えてください。

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

  • ベストアンサー
  • _kumakiri
  • ベストアンサー率75% (9/12)
回答No.2

memsetという命令があります。 っが、これは連続メモリ領域を一括で書き換える、つまり行を一括で書き換えることしかできません。 案件である領域であれば、 memset( &A[0][5], 0, sizeof(A[0][5])*7 ); // A[0][5]~A[0][12] はすべて0 memset( &A[1][2], 1, sizeof(A[1][2])*6 ); // A[1][2]~A[1][8]はすべて1 ってな事もできますが、読みづらい上に間違いやすいのでオススメしません。 素直に、 A[0][ 5] = A[0][ 6] = A[0][ 7] = A[0][ 8] = A[0][ 9] = A[0][10] = A[0][11] = A[0][12] = 0; とする方が、良いかと。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> C言語で質問です。 というのは必要な情報ですね。 C++であれば、 std::fill(&A[1][2], &A[1][8] + 1, 1); という方法がありますので。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

タイトルを工夫しましょう。 ここはC/C++のカテゴリーですから、 >C言語で質問です。 っていうのは当たり前ですよね。 >行列に文字や値を代入するときに同じ値の成分を簡単に代入する方法 これを聞きたいのですから、タイトルにもそう書いてください。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

GCCの独自拡張が使えるのであれば、 double A[12][12] = { [1][2 ... 8] = 1 }; のようなことができます。 そうでなければ、配列の要素の型がわかりませんので一般的には無理です。 自分で専用の初期化関数でも作りましょう。

  • neko1963
  • ベストアンサー率49% (127/258)
回答No.1

単純に書けば、こんな感じでしょうか。泥臭いですが A[0][5]=A[0][6]=A[0][7]=A[0][8]=A[0][9]=A[0][10]=A[0][11]=A[0][12]=0 A[1][2]=A[1][3]=A[1][4]=A[1][5]=A[1][6]=A[1][7]=A[1][8]=1