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

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

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

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

C++

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

Q&A

解決済

2回答

4847閲覧

C/C++ char型の配列の宣言と引数の取り方

amber_snob

総合スコア30

C

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

C++

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

0グッド

0クリップ

投稿2019/07/02 04:39

char型の配列の宣言と引数の取り方が分かりません。

c++

1char str1[] = "Hello"; 2 3char str2[] = {'H', 'e', 'l', 'l', 'o'};

通常は上記のように一文字ずつ配列に格納して宣言できると思うのですが、
{ "a", "ab", "abc", "abcde", "abcd"}のような配列はどのように宣言すればよろしいのでしょうか?
また、この場合引数に取る場合はconst char* X[] (Xはchar型の配列)ととるのでしょうか?

char型の扱いに詳しい方、教えていただきたいです。

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

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

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

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

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

guest

回答2

0

(C++に関してです)

  • 配列の中身の要素(文字)をいじくりたい場合
char A[][16] = { "a", "ab", "abc", "abcde", "abcd"}; //これを渡す関数は,こんな void funcA( char (*arg)[16] ) { ... }
  • 文字列は定数で良い場合
const char *B[] = { "a", "ab", "abc", "abcde", "abcd"}; //これを渡す関数は,こんな void funcB( const char **arg ) { ... }

上記の2つは明確に異なる.

投稿2019/07/03 04:40

編集2019/07/03 04:47
fana

総合スコア11658

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

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

0

ベストアンサー

char *str3[]={ "a", "ab", "abc", "abcde", "abcd"};

あるいは

char str3[][16]={ "a", "ab", "abc", "abcde", "abcd"};

投稿2019/07/02 04:44

y_waiwai

総合スコア87782

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

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

amber_snob

2019/07/02 04:49

返信ありがとうございます!解決できました!
y_waiwai

2019/07/02 05:00

関数の引数にする場合は、 func(char* arg[]); 後者なら func(char* arg[16]); ですかね #constはつけといたほうがいいですね
amber_snob

2019/07/02 05:06

引数の取り方まで...!! ありがとうございます!
fana

2019/07/03 04:24

> char *str3[]={ "a", "ab", "abc", "abcde", "abcd"}; これってコンパイルエラーになりませんか? const char *str3[] = ... ならOKでしょうけど. 引数の話も変.
y_waiwai

2019/07/03 04:39

ワーニングぐらいは出そうだけど、コンパイルエラーにはなりませんね<C言語のはなし
fana

2019/07/03 05:48

CだとOKなんですね.(VS2017でちょろっと試したらワーニングも出ない感じ) 話が「C/C++」というくくりの場合,こういうの面倒ですね…
rubato6809

2019/07/03 05:51

> 後者なら func(char* arg[16]); これは間違いだと思いますよ。動作確認しましたか? > y_waiwaiさん char str3[][16] = { "a", "ab", "abc", "abcde", "abcd" }; があったとき func(str3); と呼ぶんですよね? Segmentation fault 起こすんじゃないかな。
y_waiwai

2019/07/03 06:20

ああ、そうですね、これじゃポインタの配列になっちゃう ここは素直に func(char arg[][16]); とやるテですね
y_waiwai

2019/07/03 06:24

せっかく環境立ち上げたんでいろいろやってみた。 ポインタにこだわるなら、 typedef char xxchr[16]; void func(xxchr* arg){ puts(arg++);} ってテですね こいつもC++で動かそうとすると小細工する必要がありますね # typedefなしでする方法が思いつかない
thkana

2019/07/03 12:39

もしかして void func(char(*arg)[16]) と言いたいのかしら?
y_waiwai

2019/07/03 13:08

おおお、それだっ ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問