Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のポインタ演算とは?宣言・初期化から算術演算の基本までわかりやすく解説

ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは非常に重要な概念であり、配列や文字列の操作、関数間でのデータ受け渡しなど、さまざまな場面で活用されます。本記事では、ポインタの宣言・初期化の方法と、ポインタを使った算術演算について詳しく解説します。

ポインタの宣言・初期化・アクセス

まず、次のような文を例に考えてみましょう。

int qty = 179;

この文では、整数型変数 qty を宣言し、179 という値で初期化しています。変数 qty はメモリ上のどこかに配置され、そこに値が保存されます。

ポインタの宣言

int *p;

ここで「p」はポインタ変数であり、別の整数型変数のアドレスを保持します。型名の前にアスタリスク(*)を付けることで、その型の変数を指すポインタであることを表します。

ポインタの初期化

ポインタ変数を初期化するには、アドレス演算子「&」を使用します。

int qty = 175;
int *p;
p = &qty;

これにより、ポインタ p には変数 qty のアドレスが格納され、p を通じて qty の値を読み書きできるようになります。

ポインタを使った算術演算

ポインタ変数は式の中で使用できます。ポインタ変数が適切に宣言・初期化されていれば、以下のような文はすべて有効です。

a) *p1 + *p2
b) *p1 - *p2
c) *p1 * *p2
d) *p1 / *p2 ※「/」と「*」の間には必ず空白が必要。
 (なければコメント行の開始とみなされる)
e) p1 + 4
f) p2 - 2
g) p1 - p2 ※両者が同じ配列を指す場合、
 p1 と p2 の間の要素数を返す
h) p1++
i) --p2
j) sum += *p2
k) p1 > p2
l) p1 == p2
m) p1 != p2 ※比較演算は配列や文字列処理で特に有効

一方、次のような文は無効です。

a) p1 + p2
b) p1 * p2
c) p1 / p2
d) p1 / 3

ポイント: ポインタ同士の加算・乗算・除算はメモリアドレスに対して意味を持たないため許可されていません。一方、「p1 + 4」のようにポインタへ整数を加減算する操作は有効で、配列要素へのアクセスなどによく使われます。

サンプルプログラム

#include 

int main(void) {
    int a, b, x, y;
    int *p1, *p2;

    a = 12;
    b = 4;
    p1 = &a;
    p2 = &b;

    x = *p1 * *p2 - 6;
    y = 4 - *p2 / *p1 + 10;

    printf("Address of a = %d\n", p1);
    printf("Address of b = %d\n", p2);
    printf("a = %d b = %d\n", a, b);
    printf("x = %d y = %d\n", x, y);

    return 0;
}

実行結果

Address of a = 1234
Address of b = 5678
a = 12 b = 4
x = 42 y = 14

※アドレスの値(1234、5678)は実行環境や実行ごとに異なる場合があります。

プログラムの解説

  • p1 = &a; / p2 = &b;: アドレス演算子「&」により、各変数のアドレスをポインタに代入しています。
  • x = *p1 * *p2 - 6;: 間接参照演算子「*」でポインタが指す値(12 と 4)を取り出し、「12 × 4 − 6 = 42」と計算されます。
  • y = 4 - *p2 / *p1 + 10;: 「4 − (4 ÷ 12) + 10」となり、整数除算では 4 ÷ 12 = 0 なので「4 − 0 + 10 = 14」となります。

このように、ポインタを使った演算では間接参照演算子「*」によってポインタが指し示す先の実際の値を取り出して計算を行います。ポインタ演算を正しく理解することは、配列操作や動的メモリ管理など、C言語のより高度なプログラミングへの第一歩となります。

  1. PythonとOpenCVで画像の算術演算を行う方法|加算・減算のコード例付き解説

    はじめに このチュートリアルでは、OpenCVを使った画像の算術演算について学びます。画像に対しては、加算・減算・ビット演算など、さまざまな操作を適用することが可能です。ここでは、実際のコード例を交えながら、画像への演算処理の方法をわかりやすく解説していきます。 OpenCVのインストール 画像に対して演算を行うには、OpenCVモジュールが必要です。まずはターミナルまたはコマンドラインで、以下のコマンドを実行してOpenCVをインストールしましょう。 pip install opencv-python==4.1.1.26 上記のコマンドを実行すると、次のような成功メッセージが表示されます。

  2. Python×OpenCVで学ぶ画像の算術演算:加算と減算の基本

    はじめに本チュートリアルでは、PythonのOpenCVを使って、画像同士の算術演算(加算・減算)を行う方法を解説します。まずはOpenCVモジュールをインストールする必要があります。以下のコマンドを実行して、OpenCVモジュールをインストールしましょう。pip install opencv-python==4.1.1.26上記のコマンドを実行すると、次のような成功メッセージが表示されます。Collecting opencv-python==4.1.1.26 Downloading https://files.pythonhosted.org/packages/1f/51/e0b9cef23