”本気で”エンジニアを目指すなら『TECH BOOST』キャリアから逆算された講座内容で、あなたの未来をサポートします!

【C言語超入門(第35回)】ポインタの基本的な働きを学ぼう

Pocket

C言語には「ポインタ」という重要な機能があります。

ポインタを上手に使いますと、とてもプログラミングが便利になる反面、
プログラミングが複雑になり、予想していないプログラムの動作をしてしまう可能性も高まります。

そこで今回のC言語超入門では、ポインタの基本的な動きについて解説していきます。

C言語プログラミングでポインタは必須ではない

「C言語の特徴は何か」という問いに、「ポインタ」を上げる方は少なくありません。

C言語でプログラミングをするにはポインタを使うことが必須である、という風潮もあるようです。

でもポインタを使わなくても、十分にC言語でプログラミングをすることは可能です。

ポインタをとても簡単に表現するなら、「アドレスを格納した変数であり、配列の別表現である」と言えます。

冒頭でも述べましたとおり、ポインタは使い方を誤るとプログラムの誤動作につながりかねません。

ですから、無理してポインタを使わずに、通常の変数と配列を使ってプログラムをした方がよい場合も多くありますし、
ポインタを使わなくても配列を使えば事足りることは、よくあるケースです。

ここで覚えておいていただきたいのは、C言語のプログラミングにおいてポインタは必須ではなく、配列で代用することができる、ということです。

基本的なポインタの働き

まずは、ポインタを使った簡単なプログラムを見ながら、ポインタの働きを見ていきましょう。

ポインタを使ったサンプルプログラム

以下のプログラム1は、ポインタを使ったサンプルプログラムです。

ポインタ変数の宣言方法

ポインタを使った変数を宣言するには、変数名の前に変数名の前に *(アスタリスク)をつけます。

プログラム1では、main関数の冒頭で、ポインタ変数ptを宣言しています。

ポインタ演算子

ポインタを操作するためには、次のポインタ演算子を使います。

・ & 変数のアドレス(変数データが格納されているメモリ番地)を取り出す
・ * 変数の値をアドレスとして捉え、そのアドレスにあるデータを取り出す

プログラム1では、以下のとおり、変数xのアドレスをポインタ変数ptと、自動変数yに格納しています。

プログラム1の実行結果の解説

さて、それではプログラム1の実行結果についても続けて解説をしていきます。

プログラム1では、 ポインタ変数ptの値、ポインタ変数ptが示すアドレスに格納されている値、変数yの値を出力しています。

変数ptと変数yの出力結果

出力結果から、変数ptと、変数yの値を見ますと、巨大な数値が格納されていますね。

これは、変数xのデータが格納されているコンピューター上のアドレスです。

なお、現時点ではアドレスを意識する必要はありません。

アドレスが格納される、ということだけ覚えて頂ければ十分です。

変数 *pt の出力結果

さて、このプログラム1で一番重要なのが、変数 *pt の出力結果です。

変数 *pt の出力結果は、変数ptに格納された変数xのアドレスを参照して、
そのアドレスに格納されているデータを取り出したものです。

変数xには、数値123が格納されていますから、*ptの出力結果も、数値123が表示されていることが分かりますね。

ここで大切なことは、変数ptと変数yの両変数には、変数xのアドレスが格納されているのですが、
ポインタ変数ptであれば、格納されたアドレスが指し示す場所のデータを表示できる、ということです。

言い換えますと、ポインタ変数は、格納されたデータを「数値」として取り扱う一方で、変数名の前に * をつけることで、格納されたデータを”変数アドレス”としても取り扱うことができる、ということです。

変数アドレスとして取り扱うときは、アドレスで指し示す場所からデータを取り出してくるのです。

少しややこしく感じるかもしれませんし、動きを理解するまで少し時間がかかるかもしれません。

プログラム1をよく見ながら、ポインタがどのような働きをするのかを覚えてくださいませ。

C言語超入門の第35回まとめ

さて今回のC言語超入門では、「ポインタ」の基本的な働きについて解説いたしましたが、いかがでしたでしょうか。

最後にもう一度、ポインタの基本について、おさらいしておきましょう。

・ C言語のプログラミングにおいてポインタは必須ではない
・ 変数名の前に & をつけることで、変数のアドレス(変数データが格納されているメモリ番地)を取り出す
・ 変数名の前に * をつけることで、変数に格納されたデータをアドレスとして捉え、そのアドレスにあるデータを取り出す

ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

『TECH BOOST』なら、AI、IoT、ブロックチェーンなど最新技術が学べる!今流行りの技術を学んで、新たな一歩を踏み出そう!

プログラミングで挫折しそうなら、現役エンジニアにマンツーマンで相談してみませんか?オンラインのプログラミングスクール「TechAcademy」のメンターが対応。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る