C言語 配列 これを見れば誰でもわかる!
こんにちは!mubasaです!
この記事ではC言語の配列について詳しく簡単に説明していきます!
目次
配列とは?
まず配列って何?というお話ですが、配列というのはデータ型(intとかdoubleとか)が同じ値が複数あるとき、その値を1つの変数として使っちゃおう!というものです。
例えば1、3、5という3つの値を使いたい時普通に宣言すると変数が3つ必要になっちゃいますよね?でも配列を使うと1つの変数にまとめることができるため、コードが簡潔でわかりやすくなります!
この記事では配列の使い方を1から解説していきます!
配列 初期化と宣言方法
配列の宣言方法
配列での変数の宣言はデータ型と変数名と要素数を記述して以下のように宣言します。
見てもらうとわかる通り、配列を使えば変数の数を減らすことができます。
配列の初期化方法
配列の初期化には、宣言の時にまとめて初期化をしてしまう方法と、宣言後に値を1つづつ代入していく方法があります。
宣言の時にまとめて初期化する場合は配列の要素数(上の画像で言う[3])を省略して、自動的に要素数を設定してもらうことができます。
全て行なっていることは全く同じです。どの方法を使っても初期化をすることができます。
配列 要素数の決定
配列では宣言の際に要素数を指定する場合があります。
どのように要素数を決めればいいのかと言うことですが非常に簡単です。
値を3つ使いたいなら要素数の宣言を[3]とすればいいし、値を10個使いたいなら要素数の宣言を[10]とすればいいのです。
配列 要素数を取得する方法
sizeofという関数を使うことで、配列の長さをバイト数で取得することができます。
ここではsizeof関数を使って、「配列全体の長さ」と「配列の要素1つの長さ」を取得して、割り算をすることで要素数を導き出しています。
下に例を示します
「配列全体の長さ」➗「要素1つの長さ」=要素数 となります
配列 ポインタとしての使い方
C言語ではポインタというものがあります。
ポインタについては以下の記事に詳しくまとまっています!
ここでは配列の中身をポインタで受け取る方法を紹介します。
ポインタでは配列の先頭(要素[0]の部分)のアドレスを取得することができます。そのため、配列から値を受け取るには、アドレスを1つずつずらしてあげればOKです。
以下に簡単な例を示します
出力部分で配列の先頭アドレスp1を変数iを使って加算していくことで、配列の要素を出力しています。
1回目のfor文で*(p1+i)のiは0なので、p1先頭の値を取得。iを1ずつ増やすことでアドレスをずらしていきます。
ここで注意して欲しいのは「*」(アスタリスク)を忘れないことです。これを忘れてしまうと値の取得ができません。
配列 引数としての使い方
せっかく配列を使って値を1つにまとめたんだからそのまま関数の引数として使いたいですよね?もちろん可能です。
以下のように記述することで関数の引数として受け渡しができます。
めちゃくちゃ簡単じゃないですか?
でもあまりこの方法は使われません。ポインタで受け渡しをしたほうが簡単だからです。
配列のポインタを引数にする
実はポインタを使うのもあまり難しくありません
最初の関数の宣言部分を
『void func(int*);』に変更し、
出力用関数のところを『void func int num*』
funcの中のprintf文を
『printf("%d",num)
++num;』
描き替えるだけでポインタでの受け渡しによる出力できます。「++num」というのはポインタのアドレスを1つ進めるよ!っていう処理です。
配列の要素数を記述するのは非常に面倒なのでこちらを利用することが望ましいです。
多次元配列の宣言
多次元配列というのは、次元が増えた配列のことです。行と列を使いたい場合は2次元配列になります。これを使えば行列計算とかもできちゃいます。
多次元配列は
データ型 配列名[行数][列数] = {{要素[0][0],要素[0][1],.......},{要素[1][0],要素[1][1],......}};
という形で宣言します。「{}」で要素全部を囲って、その中にさらに「{}」で行ごとに区切り、「,」で列ごとに区切っていきます。
少し複雑ですが以下の画像を見るとわかりやすいです。
このように「{}」と「,」で区切ることで宣言ができます。
この先の多次元配列の話は以下の記事で詳しく解説しています。
まとめ
ここでは配列についての基礎から説明していきました。このサイトを読めば1次元配列の使い方は完璧なのではないでしょうか?
配列は少し複雑で難しいし、覚えていられないと思いますが、非常に使うことが多いものです。もし忘れてしまった場合この記事を読みながらやれば大丈夫です(笑)
使いこなせるようになるまでこの記事を読み倒してください!少しでもお役に立てれば幸いです。
読んでいただきありがとうございました!