質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

305閲覧

配列の宣言時のように、既存の配列に一度に値を代入する方法はありますか?

matsu_phy

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/02/23 08:08

編集2019/02/23 08:15

C++

1float blocks[4][4] = { { 1,3,5,1}, { 4,4,7,2 }, { 4,2,7,3 }, { 1,6,8,8 } };

このように、配列の宣言時は値を一度に代入することができますが、既存の配列には、

C++

1float blocks[4][4]; 2blocks[0][0] = 1; 3blocks[0][1] = 3; 4blocks[0][2] = 5; 5blocks[0][3] = 1; 6blocks[1][0] = 4; 7. 8. 9. 10

このように、1つずつ代入することしかできないのでしょうか?宣言時のように一度に代入する方法があれば教えてくださいm(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/02/23 08:14

C と C++ と C# は違う言語です。タグを直してください。
matsu_phy

2019/02/23 08:16

修正いたしました。
guest

回答3

0

たとえばこんな:

C++

1#include <algorithm> 2#include <array> 3#include <iostream> 4 5int main() { 6 // 初期値 7 std::array<float,16> initial = { 1,3,5,1, 8 4,4,7,2, 9 4,2,7,3, 10 1,6,8,8 }; 11 12 // blocksに初期値をコピー 13 float blocks[4][4]; 14 std::copy(initial.begin(), initial.end(), &blocks[0][0]); 15 16}

投稿2019/02/23 11:01

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2019/02/23 15:32 編集

私もこちらの方法を使います。 メモリ配置(align)が確実に同じである自信がなければできず、少しリスクはありますが。 ただ、私ならinitialとblocksはどちらも同じ形にして、一次元配列にするかもです。
guest

0

あなたの求める「代入」かというとちょっと???ですが(そもそも初期化と代入はちょっと違う気がするけど)、Cだったらこんなお茶目さんも。

C

1#include <string.h> 2#include <stdio.h> 3 4struct Container { 5 float blocks[4][4]; 6} ; 7 8int main(void){ 9 float blocks[4][4]; 10 memcpy( 11 blocks, 12 (float[][4]){ 13 { 1,3,5,1 }, 14 { 4,4,7,2 }, 15 { 4,2,7,3 }, 16 { 1,6,8,8 } 17 }, 18 sizeof(blocks) 19 ); 20 for(int i=0;i<4;i++){ 21 for(int j=0;j<4;j++){ 22 printf("%4.1f",blocks[i][j]); 23 } 24 printf("\n"); 25 } 26 printf("\n"); 27 28 29 struct Container c1, c2; 30 c1 = (struct Container){{ 31 { 1,3,5,1 }, 32 { 4,4,7,2 }, 33 { 4,2,7,3 }, 34 { 1,6,8,8 } 35 }}; 36 c2 = c1; 37 38 for(int i=0;i<4;i++){ 39 for(int j=0;j<4;j++){ 40 printf("%4.1f",c1.blocks[i][j]); 41 } 42 printf("\n"); 43 } 44 printf("\n"); 45 46 for(int i=0;i<4;i++){ 47 for(int j=0;j<4;j++){ 48 printf("%4.1f",c2.blocks[i][j]); 49 } 50 printf("\n"); 51 } 52 53 return 0; 54}

後半の構造体で包むのはC++でも通っちゃったり。

C++

1#include <cstring> 2#include <cstdio> 3 4 struct Container { 5 float blocks[4][4]; 6 } ; 7 8int main(void){ 9 Container c1, c2; 10 c1 = {{ 11 { 1,3,5,1}, 12 { 4,4,7,2 }, 13 { 4,2,7,3 }, 14 { 1,6,8,8 } 15 }}; 16 c2 = c1; 17 18 for(int i=0;i<4;i++){ 19 for(int j=0;j<4;j++){ 20 printf("%4.1f",c1.blocks[i][j]); 21 } 22 printf("\n"); 23 } 24 printf("\n"); 25 26 for(int i=0;i<4;i++){ 27 for(int j=0;j<4;j++){ 28 printf("%4.1f",c2.blocks[i][j]); 29 } 30 printf("\n"); 31 } 32 return 0; 33}

投稿2019/02/23 10:24

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

やり方としては、別に配列を定義し、それを代入する、というテがありますが、あんまし意味ありませんね。
じみちに一つづつ代入していきましょう

投稿2019/02/23 08:17

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsu_phy

2019/02/23 08:22

そうでしたか...面倒ですが、仕方がないようですね。 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問