• 締切済み

配列とは

C言語の配列についてなんですが Q.配列とは何か、言葉で説明せよ A.複数のデータが保存できる領域をまとめて確保したもの これでもよろしいでしょうか?

noname#16877
noname#16877

みんなの回答

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

とりあえず面倒なので答えを書きます。 「配列型」というのは、特定の型を持つオブジェクトを連続して割り付けたもので、「配列」というのは、配列型を持つオブジェクトのことです。 ここで重要なのは、「特定の型」を持つオブジェクトの集まりであり、異なる型が混在することはできないことと、「連続して割り付けたもの」であることです。 添え字云々はポインタに関することであり、配列とは「直接的には」関係ありません。また、配列名云々も、浮動小数点数の説明をする際に変数名の話をしないのと同様、関係のない話です。(具体例として挙げるのならよいと思います) テストで点数を採るためのテクニックについて指南することはできませんので、それが目的なら先生に聞いてください。

noname#16877
質問者

お礼

んーCについてはあまり詳しく習ってなくて超初歩的な段階なのでよくわかりませんでした、すいませんでした。

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

> A.複数のデータが保存できる領域をまとめて確保したもの これだと構造体も含まれてしまうので、配列というより集成体の説明になると思います。 配列を説明するには、少なくともあと二つの特徴を述べる必要があると思います。

noname#16877
質問者

補足

授業で習ったプリントには 複数のデータが保存できる領域をまとめて確保し、これに1つの名前(配列名)をつける。個々のデータを保存する場所(要素)は、番号(添字、インデックス)で区別する。 個々の添字は、配列名と添字を組み合わせてアクセスする。 となっているのですが、テストに出る場合さすがにこれ全てが出るわけではないと思うので、短くしてみたんですが。。。

関連するQ&A

  • 配列を宣言した際メモリ内の様子

    「配列」を宣言した際、メモリ内では何が起きているのでしょうか? 配列宣言した際にメモリ内にて、複数のデータを格納する為に、メモリー領域がまとめて確保され、その確保した領域に名前が付けられるのでしょうか? 分かりやすく教えてください。 よろしくお願いします。

  • C言語の配列と記憶領域の勉強をしています。

    私は大学でC言語の勉強をしています。その中で今「配列と記憶領域」の勉強をしているんですが、「動的記憶領域を確保せよ」というプログラムをつくる問題がわかりません。そもそも「動的記憶領域」という言葉の意味がわからないので、詳しく知っていらっしゃる方がいれば、教えてくださいますか?よろしくお願い致します。

  • C言語の基礎的な質問---文字配列の初期化

    C言語の配列の初期化に関する質問です。 もし規格によって回答が異なる場合は、ANSIのCということにしてください。 関数の中に、 char str[ ]="ABC"; (イ) という宣言があるとします。(staticは付きません。) これは、 char str[ ]={'A', 'B', 'C', '\0'}; (ロ) と全く同じ意味でしょうか。  似て非なるものに char *str="ABC"; (ハ) というものがあります。この場合は、 strとは違うところに"ABC"('C'の次には'\0'があります。)という領域が確保されていて、 その先頭アドレスでstrが初期化されるのですよね。 (イ)(ロ)(ハ)のいずれの場合も関数の中に書かれているとすれば、 いずれもstrは自動変数で、関数実行時にstrの領域が確保されますよね。 (イ)は配列strの領域が確保されるときに、 配列strとは別のところにある"ABC"という領域の内容を、コピーして設定する、 ということでしょうか。 (ロ)は、配列の領域確保時にstr[0]を'A'で、str[1]を'B'で、str[2]を'C'で、str[3]を'\0'で、初期化する、 ということで、 配列とは別のところには"ABC"という領域はない、 という考えでよろしいでしょうか。 もしそうだとしたら、配列とは別のところに"ABC"という領域があるかどうかという点で(イ)と(ロ)は異なることになりますが、そう考えてよろしいのでしょうか。 それとも、そういうことは処理系に依存することなんでしょうか。

  • 配列の確保の仕方

    C言語でプログラムを記述していますが、 確保している配列が多すぎるためか、 access vilation at ・・・ などのエラーが出ます。 <プログラム> #define A 1000 #define B 10000 をグローバルで宣言して、各関数内でこれを用いて宣言しています。 int data[A][B]; double root[A][B];   ・   ・   ・ int score[A][A][B]; などを初めにたくさん宣言しています。 聞くところによると、動的に確保すればいい、とも聞いたんですが、あまり意味がわかりません。 上のエラーメッセージが出ないようにするにはどうすればいいのでしょうか? この説明だけでお分かりいただけないなら、言っていただければ詳しく言います。

  • 配列や連想配列について

    言語一般の配列や連想配列について 最近どういう解釈をしていいのか わからなくなってしまいました。 仮にPerlで話をさせてもらいますと、 連想配列%FORMがあるとき、 個々の要素にアクセスする場合 例えば$FORM{'name'}などと記述しますが、 この$FORM{'name'}を みなさんはどのように解釈しているでしょうか? $FORM{' '}にキー nameを 代入しているようなイメージで、 「連想配列%FORMからキー'name'の値を取得する」 という考え方でしょうか? わたしは最近、 $FORM{'name'}はそれ自体が一つの変数という 考え方が出来るのではないかという気がしているのですが、 連想配列の実装から考えると この考え方は正しいのでしょうか? 以前、配列について同様の質問を したことがあります。 例えばC言語でint a[100]と宣言した場合は、 連続的なアドレスに確保されるため、 a[2]はaという名前のアドレスから a + 2 番目の場所という意味になるが、 言語によっては不連続なアドレスに 確保されるため、a[2]は一つの変数名として 考える必要がある・・ との回答でした。 ならば連想配列の場合も もし不連続なアドレスに確保されるならば、 $FORM{'name'} は一つの変数名と 考えたほうが正しいのではないかと 思ったからです。 連想配列の内部的な処理がどうなっているのか 教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • c言語のmalloc関数、またrealloc関数

    c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。

  • 配列について

    C言語についてです。 配列を次のように指定します。 a[3][3][3]={{ {1,7,6}, {6,9,2}, {3,1,1}, },{ {4,6,5}, {5,2,2}, {9,3,7}, },{ {2,6,8}, {2,2,4} {1,1,5}, }} b[3][3]={ {5,5,1}, {3,8,2}, {6,7,0}, } aの配列の中で、bの配列との差が1であるのが多い配列を表示するプログラムを教えてください。 ただし、 {1,7,6}, {6,9,2}, {3,1,1}, なら1、 {4,6,5}, {5,2,2}, {9,3,7}, なら2、 {2,6,8}, {2,2,4} {1,1,5}, なら3と表示する。

  • 配列の要素の入り方

    こんばんは。 現在C言語のプログラミングを勉強しています。 まだまだ初心者で基礎も十分には理解できていないので、とても基本なのかもしれませんが質問させていただきます… 例えば以下のような、配列に文字を入力するだけのプログラムを作ったとします。 --------------------------------- #include<stdio.h> main(){  int data[10];  printf("input - ");  fgets(data,10,stdin); } --------------------------------- これを実行し、 input - abc のように「abc」と入力すると、配列にはどのように入るのですか?  data[0]=a, data[1]=b, data[2]=c となるまではわかるのですが、data[3]からdata[9]には何が入るのでしょうか。配列のクリアはしていない状態です。 改行とnullが入る、というように聞いたのですが、これらはどのような順(?)で配列に入っているのかがわかりません。 よろしくお願いします。

  • 数字を配列に入れるかセルに入れるかに違いはあるのでしょうか

    a(10)の配列に10個の数字を代入するのと cells(i,1)のセル(iは1から10)に数字を入れるのは メモリ上で違うんでしょうか? 配列の場合はメモリ上に確保されるのでしょうけど、 セルの場合はどこに確保されるんでしょうか? メモリにロードされたエクセルの領域に確保されるのでしょうか? どっちが良いとかはありますでしょうか?

  • 配列について

    プログラミング言語一般の配列について思うことがあるのですが、 仮にJavaScriptで話を進めます。 (JavaScriptの配列は、正確には連想配列としての実装で、 インデックスに数字を使用するときは自動的に文字列に 置き換えられるそうですが、その辺の話は無視させてください。) 本やネットなどで配列に関する説明を見ると、 「var a=new Array(3);で、a[0],a[1],a[2]の3つの配列要素が確保される」などとあり、 図解なんかでは、一つ目の箱にa[0]、2つ目の箱にa[1]などと 書かれていて、普通の変数の場合と同様に、あたかもa[0]やa[1]が個々の要素の名前のように解説してある場合が多いのですが、 どうもこれって違うんじゃないのかって気がしてしょうがないです。 配列の1番目の要素にアクセスする手段として、a[0]と記述するのであって、 a[0]そのものが個々の要素の名前ではないですよね。 名前だとしたら、a[0]は文字列でなくてはいけないと思うのですが、 みなさんはどう思われますか? まぁ、実際プログラミングする際にはどうでもいいような話かも知れませんが(^^; よろしくお願いします。

専門家に質問してみよう