Saturday, September 1, 2018

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には特別な意味があります。 それはポインタがアクセス可能なメモリ位置を指すことを意図していないことを示す。 しかし、慣例により、ポインタがヌル(ゼロ)値を含んでいれば、何も指していないものとみなされます。

ヌルポインタをチェックするには、次のように 'if'文を使用できます

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


ポインタの詳細
ポインタには多くの簡単な概念があり、Cプログラミングにとって非常に重要です。 次の重要なポインタの概念は、Cプログラマ

Sr.No.Concept & Description
1Pointer arithmetic
There are four arithmetic operators that can be used in pointers: ++, --, +, -
2Array of pointers
You can define arrays to hold a number of pointers.
3Pointer to pointer
C allows you to have pointer on a pointer and so on.
4Passing pointers to functions in C
Passing an argument by reference or by address enable the passed argument to be changed in the calling function by the called function.
5Return pointer from functions in C
C allows a function to return a pointer to the local variable, static variable, and dynamically allocated memory as well.














No comments:

Post a Comment

Interfaces and their protocol stacks

インタフェースとそのプロトコルスタック 主要なネットワーク要素に精通した後、これら要素間のインタフェースをよりよく知る時期が来ています。 インタフェースは、MME、SGWおよびPGWが他のネットワーク要素(例えば、HSSまたはPCRF)と協働することを可能にする。 それらの...