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

C ++でのぶら下がり、ボイド、ヌル、ワイルドポインタ


ダングリングポインタ

ダングリングポインタは、解放(または削除)されたメモリ位置を指すポインタです。ポインタがダングリングポインタとして機能するさまざまな方法があります

関数呼び出し

ローカル変数が静的でない場合、ローカル変数を指すポインターはぶら下がります。

int *show(void) {
   int n = 76; /* ... */ return &n;
}

出力

Output of this program will be garbage address.

メモリの割り当て解除

int main() {
   float *p = (float *)malloc(sizeof(float));
   //dynamic memory allocation.
   free(p);
   //after calling free()
   p becomes a dangling pointer p = NULL;
   //now p no more a dangling pointer.
}

変数がスコープ外になります

int main() {
   int *p //some code// {
      int c; p=&c;
   }
   //some code//
   //p is dangling pointer here.
}

ボイドポインタ

ボイドポインタは、どのデータ型にも関連付けられていないポインタです。これは、ストレージ内のデータの場所を指し、変数のアドレスを指します。汎用ポインタとも呼ばれます。

いくつかの制限があります

  • その具体的なサイズのため、voidポインタのポインタ演算はできません。
  • 逆参照として使用することはできません。

#include<stdlib.h>
#include<iostream>
using namespace std;
int main() {
   int a = 7;
   float b = 7.6;
   void *p;
   p = &a;
   cout<<*( (int*) p)<<endl ;
   p = &b;
   cout<< *( (float*) p) ;
   return 0;
}

出力

7
7.600000

アルゴリズム

Begin
   Initialize a variable a with integer value and variable b with float value.
   Declare a void pointer p.
   (int*)p = type casting of void.
   p = &b mean void pointer p is now float.
   (float*)p = type casting of void.
   Print the value.
End.

ヌルポインタ

ヌルポインタは何も指さないポインタです。

nullポインタのいくつかの使用法は

です。
  • ポインタ変数に有効なメモリアドレスがまだ割り当てられていないときに、ポインタ変数を初期化するため。

  • 有効なメモリアドレスを渡したくない場合に、関数の引数にnullポインタを渡すこと。

  • ポインタ変数にアクセスする前にnullポインタをチェックします。そのため、ポインタ関連のコードでエラー処理を実行できます。 NULLでない場合にのみ、ポインタ変数を間接参照します。

#include <iostream>
using namespace std;
int main() {
   int *p= NULL; //initialize the pointer as null.
   cout<<"The value of pointer is ";
   cout<<p;
   return 0;
}

出力

The value of pointer is 0.

ワイルドポインタ

ワイルドポインタは、任意のメモリ位置を指すポインタです。 (NULLでもない)

int main() {
   int *ptr; //wild pointer
   *ptr = 5;
}

  1. C++の各ノードIIに次の右ポインタを移入する

    各ノードに次のフィールド(データ、左、右、次)があるバイナリツリーがあるとします。左は左のサブツリーを指し、右は右のサブツリーを指し、次のポインタは次のノードを指します。右側にノードがない場合、それはnullになります。したがって、最初に次の各ポインタがnullに設定され、リンクを作成する必要があります。ツリーが最初のツリーのようであるとすると、次のノードに変換されます- これを解決するには、次の手順に従います- pre:=root、nextPre:=null、prev:=nullを設定します preがnullではない場合 preがnullではない場合 preの左側がn

  2. C++の各ノードに次の右ポインタを設定する

    完全な二分木があり、各ノードに次のフィールドがあるとします:(データ、左、右、次)、左は左のサブツリーを指し、右は右のサブツリーを指し、次のポインターは次のノードを指します。右側にノードがない場合、それはnullになります。したがって、最初に次の各ポインタがnullに設定され、リンクを作成する必要があります。ツリーが最初のツリーのようであるとすると、次のノードに変換されます- これを解決するには、次の手順に従います- pre:=root、nextPre:=null、prev:=nullを設定します preがnullではない場合 preがnullではない場合 preの左側