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

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

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

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

3回答

855閲覧

C言語(Arduino)で二値の配列を渡したい

EIP

総合スコア13

C

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/04/20 18:43

編集2020/04/20 18:44

C言語で、例えば

C

1digitalWrite(in1, 1); 2digitalWrite(in2, 0); 3digitalWrite(in3, 1); 4digitalWrite(in4, 0); 5 6digitalWrite(in1, 0); 7digitalWrite(in2, 0); 8digitalWrite(in3, 1); 9digitalWrite(in4, 1);

みたいな表現が何回も続く場合、それぞれの二値の値を配列で渡したいのですが、どのようにすればよいのでしょうか。
具体的に言うと、

C

1void Control(int* array){ 2 digitalWrite(in1, array[0]); 3 digitalWrite(in2, array[1]); 4 digitalWrite(in3, array[2]); 5 digitalWrite(in4, array[3]); 6}

のような関数に引数 {1,0,1,0} を渡すようなイメージです。

int array[4] を宣言して、ひとつづつ変えていくと結局は可読性が変わらないと思うのですが、もう少し良い方法はありませんでしょうか。

C

1int array[4] = {1,0,1,0}; 2Control(array); 3 4array[0] = 0; 5array[1] = 0; 6array[2] = 1; 7array[3] = 1; 8Control(array);

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

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

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

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

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

jimbe

2020/04/20 18:56

2次元配列ということでは無くてでしょうか?
EIP

2020/04/20 19:08

二値の1次元配列です! よく考えたらわざわざ二値と言う必要はありませんでしたね。
jimbe

2020/04/20 19:36 編集

あぁ, いえ, 2次元配列でデータを持って, その1つを渡していくというのでは出来ないのでしょうか, ということです. int array[][4] = {{1,0,1,0},{0,0,1,1}}; for(int i=0;i<2; i++) Control(array[i]); という感じです.
EIP

2020/04/20 20:04

なるほど、確かにそれでいいですね。 回答へのご記入お願いします!
guest

回答3

0

ベストアンサー

2次元配列でデータを持って, その1つを渡していくというのでは出来ないのでしょうか.

int array[][4] = {{1,0,1,0},{0,0,1,1}};
for(int i=0; i<2; i++) Control(array[i]);

という感じです.

投稿2020/04/21 03:12

jimbe

総合スコア12747

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

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

0

C

1struct _portdat{ int port; int dat } initdata[]={ 2 { in1, 1 }, 3 { in2, 2 }, 4 { in3, 3 }, 5 { in4, 4 }, 6 7 { -1,0}, 8}; 9 10 ... 11 ... 12 13void nanka(struct _portdat *portdat) 14{ 15 while(portdat->port>=0){ 16 digitalWrite(portdat->port, portdat->dat); 17 portdat++; 18 } 19 なんやかんや 20... 21} 22

こんなはなしかな?

投稿2020/04/21 00:52

y_waiwai

総合スコア87800

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

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

0

それぞれの二値の値を配列で渡したい

結局は可読性

どちらが手段でどちらが目的でしょう?

どうなれば満足なのかがいまひとつ把握出来ていませんが、
"2値"を積極的に使うなら、例えばこんな?

C++

1void control(int out){ 2 digitalWrite(in1, out&1); 3 digitalWrite(in2, out&2); 4 digitalWrite(in3, out&4); 5 digitalWrite(in4, out&8); 6} 7//あるいは 8void control2(int out){ 9 int ins[]={in1,in2,in3,in4}; 10 for(int i=0;i<4;i++){ 11 digitalWrite(ins[i],out&(1<<i)); 12 } 13} 14 15void setBit(int* num, int n){ 16 *num|=1<<n; 17} 18void clrBit(int *num, int n){ 19 *num &= ~(1<<n); 20} 21 22void func(){ 23 int out = 0b0101; 24 control(out); 25 26 clrBit(&out,0); 27 clrBit(&out,1); 28 setBit(&out,2); 29 setBit(&out,3); 30//値設定の4つ並びがイヤだということなら、 31//out=0b1100; 32 control(out); 33}

そもそもが扱う情報量が多くないし、情報の型はプリミティブだし、足掻いてもあまり成果が出そうにないシチュエーションには思えます。

投稿2020/04/20 23:19

編集2020/04/20 23:25
thkana

総合スコア7659

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問