「配列変数」とは?プログラムの中でどこに当たるのかについて

このQ&Aのポイント
  • 「配列変数」とは、プログラムの中で複数のデータを格納するために使用される変数です。
  • 配列変数は、メモリ上の連続した領域にデータを格納し、インデックスを使用してアクセスすることができます。
  • 「配列変数」は、プログラムの中で特定の位置に関連付けられており、その位置には複数のデータが格納されます。
回答を見る
  • ベストアンサー

「配列変数」て何ですか!?

#include <stdio.h> #include <string.h> int main() { int suuretsu[10]; int *p; for ( p = suuretsu; *p != 0; p++ ){ printf("p=%p *p=%d\n", p, *p); } }  以上のプログラムで!  「配列変数」が”どこ”に当たるのか  ?いまいちピンとこないです!。  参考書にも「配列変数」の解説がありません!  ググッたら・違ったプログラムでの解説はあり、  なんとなく分かりはしました。   しかし!プログラムが変わるとニュアンスの違いで!  また違った関係があるみたいでいまいち分かりません--    ここでいう、「配列変数」はどこに当たりますか!?  宜しくお願いします。  

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>参考書にも「配列変数」の解説がありません! 参考書ですか? 入門書ですか?? いずれにしろ、配列変数について記載されていないような入門書なら廃棄しちゃっていいんじゃないかと思いますけどねぇ……。 > 以上のプログラムで! > 「配列変数」が”どこ”に当たるのか > ?いまいちピンとこないです!。 >int suuretsu[10]; が配列変数です。 int型でsuuretsuという名前の配列で、suuretsu[0]~suuretsu[9]までの10個が使えます。 そして、掲示されたコードはどこから持ってきたものか不明ですが、 かなり高い確率でバッファオーバーランします。 未初期化のローカル変数の内容は「不定」ですので、suuretsu[0]~suuretsu[9]の中に値が0になるものがなければ、そのまま突っ走ります。(0が見つかるまで) で、アクセス禁止な領域を参照してOSに止められます。 # 書き込んではいないからまだマシ…かなぁ……。

Campus2
質問者

お礼

Q: 「配列変数」が”どこ”に当たるのか A:(アンス)  int suuretsu[10]; が配列変数です。   御回答ありがとうございました。  御回答から!そうですねmojiretsu[10]とは潜在的に以下の範囲が含まれていることでしたね^^ mojiretsu[0] mojiretsu[1] mojiretsu[2] mojiretsu[3] mojiretsu[4] mojiretsu[5] mojiretsu[6] mojiretsu[7] mojiretsu[8] mojiretsu[9]  今度から何かと分からないことがあれば!何か”潜在的”に含まれていないか”といった考え方で!一つの解決策につながると分かりました。

その他の回答 (2)

回答No.3

手元にある古い規格書 JIS X 3010-1993 には、「配列変数」という単語は出てきません。(最新の規格には出ているかもしれません。)  「配列変数」という言葉を使って解説しているWebページを見ると、配列名を指しているもの(質問文中のプログラムではsuuretu)と、個々の配列要素(suuretu[0], ..., suuretu[9]、あるいは *suuretu, ..., *(suuretu+9))を指しているものの両方があるようです。  まともな参考書なら、「配列変数」という用語は使わないでしょうし、もしも使うとしても「xxxを配列変数いう(ことにする)」という記述があるでしょう。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

ぐぐったら C++ での配列変数の説明が出てきました。 http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01015.html

関連するQ&A

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • 引数で指定された配列の要素数の取得

    どうもこんにちは。 C言語でプログラムを作成しています。 ある関数に配列を渡すことを考えていますが、渡した配列の要素数を取得する方法は何かありますか? 標準の関数を見ても、配列の先頭アドレスのポインタとともに、配列の要素数を渡しているものばかりで、配列のポインタを渡しているものは見かけません。 要素数があらかじめわかっていれば、それを引数の型に指定できますが、呼び出されるまで不明な場合はうまくいきません。 配列の要素数も引数として一緒に渡す必要がありますか? [作ってみたサンプル] #include <stdio.h> #include <stdlib.h> #include <string.h> // func1 と func2 をまとめられないだろうか。。。 void func1(int (*p)[10]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } void func2(int (*p)[5]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } int main(int argc, char *argv[]) { ________int ary1[10] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 }; ________int ary2[5] = { 3, 6, 9, 12, 15 }; ________func1(&ary1); ________func2(&ary2); ________return 0; }

  • ポインタと配列 助けてください

    #include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = ######; while (*ptr != 0){ ######; ######; }      for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n", i, #####,i, #####); putchar('\n'); ptr = ######; for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", ####, ####); ####; } printf("\n"); return (0); } 一次元配列a[]の一番目の要素以外を0にするプログラム(ただし、最後の要素は0)を作成したいのですが、#の部分に何をあてはめたらいいかわかりません。 助けてください。

  • 一次元配列についてです

    配列matを以下の様に宣言し、連続した3つの数の和を順に書き出すプログラムを作成しています。が、条件式とprintfの出力の仕方が全く解りません。この二つが解る方、教えて頂けませんか。 #include <stdio.h> int main(void) { int i,mat[10]={5,3,8,2,7,1,10,4,9,6}; for(i=0;i<10;i++) { } printf("\n"); return(0); }

  • 関数内の変数の扱い方に関する質問です

    Aという関数を作って、メイン関数内の時刻t(0から100)において10おきにplanという変数を変えるプログラムをつくっています。 しかし、メイン関数内の、if(plan == 2){printf("実行\n");}の部分が無視されてしまいます。(関数A内で使ったplanという変数はメイン関数では使えないのですか??)planが2の時に実行と表示させたいのですが、良い方法はありませんでしょうか?どうかよろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int A(int ,int); int main() { int t=0,plan; for(t=0;t<100;t++){ A(t,plan); if(plan == 2){printf("実行\n");} } return 0; } int A(int t,int plan) { if(t % 20 < 10) plan = 1; else plan = 2; }

  • プログラミング 配列 合計

    配列の要素に値を読み込んで表示させるプログラムは 1#include <stdio.h> 2 3int main(void) 4{ 5 6 int i; 7 int vc[5]; 8 9 for (i = 0; i < 5; i++) 10 vc[i] =i + 1; 11 12 for(i = 0; i < 5; i++) 13 printf("vc[%d] = %d\n", i, vc[i]); 14 15 return (0); }でこれを書きなおして配列の値を合計するプログラムはどういうプログラムになるか教えていただけませんか?

  • グローバル変数の初期化のタイミング

    #include <stdio.h> int i; void main() { int j; printf( "%d\n", i ); printf( "%d\n", j ); } この結果が 0 -85899346 になるのですが グローバル変数 int i は初期化しなくても 0 になるということは 保証されているのでしょうか?

  • ポインタ配列について

    下のプログラムは、ポインタ変数の配列のプログラムです。 このプログラムを、月の順番を入れ替えて出力するプログラムに変更するにはどのようにすれば良いか分かる方いましたら、是非教えてください。例えば、JANUARYとMARCHを入れ替えて出力するプログラムなどです。 #include<stdio.h> void main() { char *p[] = {"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE", "JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"}; int i,j; *p[0]=*p[2]; *p[0]=*p[2]; for(i = 0;i < 12; ++i){ printf("%2d 月:%s\n",i+1,p[i]); } for(i = 0;i < 12; ++i){ j = -1; do{ ++j; printf("%4x ",p[i]+j); } while (*(p[i]+j) != '\0'); printf("\n"); j = -1; do{ ++j; printf(" %c ",*(p[i]+j)); }while (*(p[i]+j) != '\0'); printf("\n"); } }

  • ポインタ配列

    配列をポインタでとって、配列要素を足していこうと思ったのですが、 #include <stdio.h> int main (void) { int p[11]={11,23,43,66,54,67,51,88,22,43,-1}; int *e=p; int x=0; int i=0; while( *e!=-1 ) { x + = ( * (e+i) ); i++; } printf("%d\n",x); return 0; } x = ( * ( e+i ) ); ↑この部分がなぜだめなのか理解できません どなたか教えてくださるとありがたいです

  • 配列

    配列を使って10×10のマス(□)を表示させたいのですが、型が違いますとエラーが出てしまいます。 どこが違うのかわかりません。 わかる人がいたら教えてください。 #include<stdio.h> main() { signed char land[10][10]; int i, j; for(i=0; i<10; i++){ for(j=0; j<10; j++){ land[i][j] = □; printf("%c",land[i][j]); } printf("\n"); } }

専門家に質問してみよう