MENU

C言語のポインタ: 初心者向けガイド

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回はプログラミングの基本的な要素でありながら、理解するのが難しいとされる「ポインタ」について解説します。

C言語を例に、ポインタの基本的な使い方とその概念を理解するためのガイドを提供します。サンプルコードを通じて、ポインタがどのように動作するのか、またそれがなぜ重要なのかを学びましょう。

目次

ポインタとは

ポインタは、プログラミング言語における特殊な変数の一種で、他の変数のメモリ上のアドレスを保持します。つまり、ポインタは変数が存在する場所を指し示す役割を果たします。

ポインタを使用すると、メモリの特定の位置に直接アクセスしたり、関数に変数の参照を渡したりすることが可能になります。これにより、大きなデータ構造を効率的に操作したり、関数間でデータを簡単に共有したりすることができます。

また、ポインタは動的メモリ確保にも使用されます。これは、プログラムの実行中に必要に応じてメモリを確保・解放する技術で、データ構造のサイズが実行時まで不明な場合や、大量のデータを扱う場合に有用です。

しかし、ポインタは扱いが難しく、誤った使用はプログラムのバグを引き起こす可能性があります。したがって、ポインタを使用する際には注意が必要です。

ポインタを扱う基本的な文法

ポインタの定義(変数宣言)

ポインタは、変数のアドレスを保持する特殊な変数です。C言語では、ポインタを定義するには、変数宣言時にアスタリスク(*)を使用します。以下に、整数型のポインタを定義する例を示します。

int *p;

ポインタを扱う基本的な文法

アドレスの代入

ポインタに変数のアドレスを代入するには、アンパサンド(&)を使用します。以下に、整数型の変数numのアドレスをポインタpに代入する例を示します。

int num = 10;
int *p;
p = #

間接参照

ポインタが指すアドレスの値にアクセスするには、アスタリスク(*)を使用します。これを間接参照と呼びます。以下に、ポインタpが指す値を出力する例を示します。

printf("%d\n", *p);

この例では、*ppが指すアドレスの値、つまりnumの値を表します。したがって、このprintf文は10を出力します。

作成したCコード

今回作成したサンプルコードは、ポインタの基本的な使い方を示しています。

整数型の変数とポインタを定義し、変数のアドレスをポインタに代入します。その後、変数の値、変数のアドレス、ポインタの値、ポインタが指す値をそれぞれ出力します。

これにより、ポインタが変数のアドレスを保持し、そのアドレスを通じて変数の値にアクセスできることが確認できます。

コード解説

  1. まず、整数型の変数を定義し、その値を10に設定します。
  2. 次に、整数型のポインタを定義します。ポインタは、変数のアドレス(つまり、その変数がメモリ上のどこに格納されているか)を保持するための特殊な変数です。
  3. 定義したポインタに、先ほど定義した整数型の変数のアドレスを代入します。これにより、ポインタはその変数のアドレスを指すようになります。
  4. その後、整数型の変数の値、その変数のアドレス、ポインタの値(これは変数のアドレスと同じ)、ポインタが指す値(これは変数の値と同じ)をそれぞれ出力します。
  5. これにより、ポインタが変数のアドレスを保持し、そのアドレスを通じて変数の値にアクセスできることが確認できます。

全体のソースコード

#include <stdio.h>

int main() {
    int num = 10;  // 整数型の変数numを定義し、その値を10に設定
    int *p;  // 整数型のポインタpを定義

    p = #  // numのアドレスをポインタpに代入

    // numの値を出力
    printf("numの値: %d\n", num);

    // numのアドレスを出力
    printf("numのアドレス: %p\n", &num);

    // ポインタpの値(これはnumのアドレスと同じ)を出力
    printf("ポインタpの値(=numのアドレス): %p\n", p);

    // ポインタpが指す値(これはnumの値と同じ)を出力
    printf("ポインタpが指す値(=numの値): %d\n", *p);

    return 0;
}

実行結果

実行環境の構築

WSLを使ったLinuxでの実行環境の構築方法を以下の記事で解説しています。

コンパイル環境構築

Linux環境でC言語のコンパイラとして使用するgccの導入方法を以下の記事で解説しています。(PCなどRaspberry Pi以外の環境でも使用できます)

実行結果

先ほどのサンプルコードをコンパイルして実行すると、以下のように正しくアドレスと、格納された値が出力できました。

組込みソフトウェアの知識を仕事に活かすには

趣味でマイコンのプログラムを書いてるから、仕事でも活かしたいなあ。
でも自信が無い…

そんな時は、一度スクールで体系的に基礎を学ぶといいよ。

趣味のプログラミングスキルを活かしたいけど、「実務レベルで通用するか不安」という方には、プログラミングスクールを受講してみるのがおすすめです。

プログラミングスクールのカリキュラムは、企業の研修などでも利用されており、実践的で即戦力となるスキルを習得することが可能です。

Winスクールでは、Web系や機械学習、データサイエンスなどに加え、プログラミングスクールでは珍しいハードウェアを扱うC言語組み込みシステムやハードウェアとクラウドを連携させたIoTシステムの講座が非常に充実しています。

授業内容も受講者に対して組み込み用マイコンボードRaspberry Piを用意し、実機を使いながら学べる本格的なカリキュラムが用意されています。

また、受講者のスケジュールやロケーションに応じて、対面授業オンライン授業を選択、もしくは組み合わせて受講できるため、プログラミング初心者の方でも安心です。

家電自動車業界などへの転職を目指したい方に非常におすすめです。

また近年、クラウドソーシングのプラットフォームにも、マイコンボードを使った組み込みソフトウェアの開発案件も多く募集されており、副業でマイコンのソフトウェア開発を行う方も増えています。

クラウドワークスなどで「Raspberry Pi」と検索すると、開発解説記事作成などの案件が出てくるよ。

スクールで基礎をしっかり押さえておけば、安心して案件に応募できるね。

 プログラミング言語Python, C, C#, Java, JavaScript(React.js), Ruby, PHP, 他
 授業形式対面&オンラインが選択可能
 学習期間90分×40回(60時間)(C言語&組込みシステム開発(マイコンボード)コースの例)
 費用353,100円~(C言語&組込みシステム開発(マイコンボード)コース例)
 補助金、給付金一部の講座が教育訓練給付制度対象
 転職支援個別の就職カウンセリング、無料の就職支援セミナー
 実績・信頼性年間17,000人以上の受講者、年間1,484社の企業研修実績

\ Winスクール公式サイトを見てみる! /

まとめ

この記事では、C言語におけるポインタの基本的な使い方と概念について解説しました。サンプルコードを通じて、ポインタが変数のアドレスを保持し、そのアドレスを通じて変数の値にアクセスする方法を学びました。

ポインタは複雑な概念ですが、理解することでプログラミングの幅が広がります。これを機に、さらなる学習に挑戦してみてください。

著:柴田 望洋
¥2,530 (2023/10/11 11:12時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
著:B.W. カーニハン, 著:D.M. リッチー, 翻訳:石田 晴久
¥3,080 (2023/10/11 11:13時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
よかったらシェアしてね!
  • URLをコピーしました!
目次