工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語ポインタ完全マスター:実践的ステップで上級プログラミングへ

ポインタとは

C言語のポインタは学びやすく、楽しいものです。一部のCプログラミングタスクはポインタを使うとより簡単に実行でき、動的メモリ割り当てなどのタスクはポインタなしでは実行できません。完璧なCプログラマになるにはポインタを学ぶ必要があります。シンプルで簡単なステップで学び始めましょう。

ご存知の通り、すべての変数はメモリ位置であり、すべてのメモリ位置にはアドレスが定義されており、アンパサンド(&)演算子を使ってアクセスできます。これはメモリ内のアドレスを表します。以下の例は定義された変数のアドレスを出力します:

Live Demo
#include <stdio.h>
int main() {
    int var1;
    char var2[10];
    printf("Address of var1 variable: %x\n", &var1);
    printf("Address of var2 variable: %x\n", &var2);
    return 0;
}

実行結果:

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

ポインタとは何か

ポインタとは、別の変数のアドレスを値とする変数、つまりメモリ位置の直接アドレスです。他の変数や定数と同様に、ポインタを使用して変数アドレスを格納する前に宣言する必要があります。ポインタ変数宣言の一般形式:

type *var-name;

ここで、typeはポインタの基本型で、有効なCデータ型でなければならず、var-nameはポインタ変数の名前です。ポインタ宣言に使用されるアスタリスク*は乗算に使用される同じアスタリスクですが、この文では変数をポインタとして指定するために使用されます。有効なポインタ宣言の例:

int *ip;    /* 整数へのポインタ */
double *dp; /* doubleへのポインタ */
float *fp;  /* floatへのポインタ */
char *ch;   /* 文字へのポインタ */

すべてのポインタの値の実際のデータ型は、整数、浮動小数点、文字などに関わらず同じで、メモリアドレスを表す長い16進数です。異なるデータ型のポインタ間の唯一の違いは、ポインタが指す変数または定数のデータ型です。

ポインタの使い方

ポインタを使って頻繁に行う重要な操作がいくつかあります。(a)ポインタ変数を定義し、(b)変数のアドレスをポインタに割り当て、(c)ポインタ変数にあるアドレスの値にアクセスします。これは、オペランドで指定されたアドレスにある変数の値を返す単項演算子*を使用して行います。以下の例はこれらの操作を使用します:

Live Demo
#include <stdio.h>
int main() {
    int var = 20; /* 実際の変数宣言 */
    int *ip;    /* ポインタ変数宣言 */
    ip = &var;  /* varのアドレスをポインタ変数に格納 */
    printf("Address of var variable: %x\n", &var);
    printf("Address stored in ip variable: %x\n", ip);
    printf("Value of *ip variable: %d\n", *ip);
    return 0;
}

実行結果:

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

NULLポインタ

正確なアドレスを割り当てる必要がない場合、ポインタ変数にNULL値を割り当てるのは常に良い習慣です。これは変数宣言時に行います。NULLが割り当てられたポインタをヌルポインタと呼びます。

NULLポインタは複数の標準ライブラリで定義された値0の定数です。以下のプログラムを考えてみましょう:

Live Demo
#include <stdio.h>
int main() {
    int *ptr = NULL;
    printf("The value of ptr is : %x\n", ptr);
    return 0;
}

実行結果:

The value of ptr is 0

ほとんどのOSでは、アドレス0のメモリへのアクセスは許可されていません。これはOSによって予約されているためです。しかし、メモリアドレス0には特別な意味があり、ポインタがアクセス可能なメモリ位置を指す意図がないことを示します。慣習的に、ポインタがヌル(ゼロ)値を含む場合、何も指していないと見なされます。

ヌルポインタをチェックするには、以下のように'if'文を使用します:

if(ptr)     /* pがヌルでなければ成功 */
if(!ptr)    /* pがヌルなら成功 */

ポインタの詳細

ポインタには多くの概念がありますが簡単で、Cプログラミングにとって非常に重要です。すべてのCプログラマが理解すべき重要なポインタ概念:

番号概念と説明
1ポインタ演算
ポインタで使用できる4つの算術演算子:++、--、+、-
2ポインタの配列
複数のポインタを保持する配列を定義できます。
3ポインタへのポインタ
Cではポインタのポインタを持てます。
4関数へのポインタ渡し
参照渡しまたはアドレス渡しにより、呼び出し側の引数を呼ばれた関数で変更可能にします。
5関数からのポインタ返却
Cでは関数からローカル変数、静的変数、動的に割り当てられたメモリへのポインタを返せます。

C言語

  1. C言語変数・定数・リテラル完全ガイド
  2. C言語ストレージクラス完全理解:スコープ・ライフタイム・パフォーマンス
  3. C言語ポインタ完全マスター: 実践的エキスパートガイド
  4. C言語における配列とポインタの関係を理解する
  5. C言語: アドレスとポインタを関数に渡す – 実践ガイド
  6. C言語 構造体とポインタ: 実践ガイド
  7. C++ポインタをマスター:概念、例、実践的応用
  8. C 言語の変数、データ型、定数 – 実践ガイド
  9. C 言語ポインタ完全ガイド: 型、使い方、ベストプラクティス
  10. Verilog代入文の理解:種類、構文、ベストプラクティス
  11. Python globalキーワード完全マスター: 使い方とタイミング