Cprogramming-c-pointers

提供:Dev Guides
移動先:案内検索

C-ポインター

Cのポインターは簡単に学ぶことができます。 一部のCプログラミングタスクはポインターを使用してより簡単に実行でき、動的メモリ割り当てなどの他のタスクはポインターを使用しないと実行できません。 したがって、完璧なCプログラマーになるには、ポインターを学ぶ必要があります。 簡単で簡単な手順で学習を始めましょう。

ご存じのように、すべての変数はメモリロケーションであり、すべてのメモリロケーションには、メモリ内のアドレスを示すアンパサンド(&)演算子を使用してアクセスできるアドレスが定義されています。 定義された変数のアドレスを出力する次の例を考えてください-

#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;   /*pointer to an integer*/
double *dp;   /*pointer to a double*/
float  *fp;   /*pointer to a float*/
char   *ch    /*pointer to a character*/

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

ポインターの使用方法

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

#include <stdio.h>

int main () {

   int  var = 20;  /*actual variable declaration*/
   int  *ip;       /*pointer variable declaration*/

   ip = &var; /* store address of var in pointer variable*/

   printf("Address of var variable: %x\n", &var  );

  /*address stored in pointer variable*/
   printf("Address stored in ip variable: %x\n", ip );

  /*access the value using the pointer*/
   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 ポインターと呼ばれます。

NULLポインターは、いくつかの標準ライブラリで定義されている値がゼロの定数です。 次のプログラムを検討してください-

#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

ほとんどのオペレーティングシステムでは、アドレス0のメモリにアクセスすることは許可されていません。これは、メモリがオペレーティングシステムによって予約されているためです。 ただし、メモリアドレス0には特別な意味があります。ポインタがアクセス可能なメモリ位置を指すように意図されていないことを通知します。 ただし、慣例により、ポインターにNULL(ゼロ)値が含まれている場合、ポインターは何も指していないと見なされます。

ヌルポインタを確認するには、次のように「if」ステートメントを使用できます-

if(ptr)    /*succeeds if p is not null*/
if(!ptr)   /*succeeds if p is null*/

ポインターの詳細

ポインターには簡単ではあるが多くの概念があり、Cプログラミングにとって非常に重要です。 以下の重要なポインターの概念は、Cプログラマーには明らかなはずです-

Sr.No. Concept & Description
1

Pointer arithmetic

ポインターで使用できる4つの算術演算子があります:+、-、、-

2

Array of pointers

配列を定義して、多数のポインターを保持できます。

3

Pointer to pointer

Cでは、ポインターにポインターを置くことができます。

4

Passing pointers to functions in C

参照またはアドレスで引数を渡すと、呼び出された関数によって、呼び出された関数で渡された引数を変更できます。

5

Return pointer from functions in C

Cでは、関数がローカル変数、静的変数、および動的に割り当てられたメモリへのポインターも返すことができます。