配列を使用した成績確認プログラムの作成
1.配列の原因
これまで、コンピュータのメモリを読むときは変数でメモリを読み書きしていました.変数名には、その変数タイプに相当するスペースがメモリに表示されます.例えば、int a
int
は4バイトであるため、変数a
はメモリに4バイト空間を表す.
しかし、複数の変数を同時に処理するとどうなるのでしょうか.
もちろんint a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
そうすると可能ですが、変数が10個ではなく100個なら?1000個なら?
そうすると問題が発生します.
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
したがって、C言語は、複数の変数を同時に処理する方法を提供する.すなわち、コンピュータメモリにおいて同じタイプの変数、すなわちアレイを一度に定義する.
たとえば、int型配列には複数のint型変数がメモリに存在します.
2.配列ベース #include<stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("3번째 원소는 %d 이다.\n",arr[2]);
return 0;
}
配列は、特定のタイプの変数の集合です.
以前に変数を定義した場合
(変数のタイプ)(変数の名前);
このようにアレイを定義する場合、
(配列の形状)(配列の名前)[要素の個数];
一緒にやればいい.前例int arr[10] = {1,2,3,4,5,6,7,8,9,10};
これにより、int
型配列arr
には10個の要素があり、{1,2,3,...,10}である.char arr[10]
が与えられた場合、10要素はいずれもchar
型として定義される.
さらに、={ }
が行われると、配列内の各要素は、括弧内の値を順次含み、最初の要素は1番目、2番目の要素は2番目である.そのまま入りました.
この方法は、アレイを定義するときにのみ使用できますが、定義されたアレイは使用できません.たとえばint arr[3] = {1, 2, 3}; // 가능
arr = {4, 5, 6}; // 불가능!
上下不可.
また、このように配列内の要素を定義すると、コンパイラは、配列のサイズを省略しても、要素の数に応じて配列のサイズを定義することができる.たとえばint arr[] = {1, 2, 3, 4}; // 크기가 4 인 배열 정의
int arr2[] = {1, 2, 3, 4, 5, 6} // 크기가 6 인 배열 정의
このようにして.
配列内の要素へのアクセス
配列から各要素に近づく方法は簡単です.= { }
の2番目の要素に近づきたい場合は、n
をすることができます.たとえばprintf("Array 3 번째 원소 : %d \n ", arr[2]);
こうすればいい.なぜarr[n-1]
なのか、1からではなく0からです.配列の最初の要素はn-1
であるからです.したがって、配列された2番目の要素はarr[0]
であり、3番目の要素はarr[1]
であるため、n番目の要素はarr[n−1]である.
△なぜ0から後で議論するのか.arr[2]
だったらどうなりますか?#include<stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d 이다.\n",arr[10]);
return 0;
}
arr[10]
というわけのわからない数字が出てきました.場合によっては、エラーが発生して終了することがあります.
配列のリスク
この点を理解するには、アレイがメモリにどのように存在するかを知る必要があります.
(arr仮定は0 x 1234から(ソース:https://modoocode.com/18)
上の図は、メモリ内のアレイ-348585814
のレイアウトを示している.上の配列の場合、0 x 1234は開始アドレスである.
Cの配列はこのタイプの変数の配列と簡単に考えられる.したがって、配列には配列サイズに関する情報はありません.すなわち,arr
と言えば,C言語におけるサブ配列の最初の位置から4番目の要素であると考えられる.
(arrの末尾)
では、arr[3]
の列の末尾を見てみましょう.最初に10個の要素が定義されているため、最後の要素はarr
であり、後のメモリ部分には他の変数のデータが含まれる可能性があります.しかしarr[9]
を行うと、番組の立場からするとarr[10]
の後ろにarr[9]
があるようなので、その位置の値が表示されます.この場所がアクセスできない領域である場合、プログラムはエラーで終了します.そうでない場合は、このセクションで使用するデータの値が表示されます.
現在の場合、この位置にはarr[10]
の値があるため、この値が得られる.
これは危険です.この値が上書きされる可能性があります.この領域に-348585814
変数が定義され、b
と呼ばれる場合、arr[10] = 3
と同様の効果が得られる.これは本当に探しにくいバグを引き起こす可能性があります.したがって、配列を使用する場合は、参照する要素の位置が配列のサイズより小さいことを確認する必要があります.
Reference
この問題について(配列を使用した成績確認プログラムの作成), 我々は、より多くの情報をここで見つけました
https://velog.io/@jhon3242/배열을-활용한-성적-확인-프로그램-만들기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include<stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("3번째 원소는 %d 이다.\n",arr[2]);
return 0;
}
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int arr[3] = {1, 2, 3}; // 가능
arr = {4, 5, 6}; // 불가능!
int arr[] = {1, 2, 3, 4}; // 크기가 4 인 배열 정의
int arr2[] = {1, 2, 3, 4, 5, 6} // 크기가 6 인 배열 정의
printf("Array 3 번째 원소 : %d \n ", arr[2]);
#include<stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d 이다.\n",arr[10]);
return 0;
}
Reference
この問題について(配列を使用した成績確認プログラムの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@jhon3242/배열을-활용한-성적-확인-프로그램-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol