Showing posts with label ポインタ. Show all posts
Showing posts with label ポインタ. Show all posts

Sunday, September 2, 2018

Cでの配列へのポインタ

この章は、「ポインタ」の章で説明するまで理解していない可能性が高いです。

Cでポインターを理解していると仮定してみましょう。配列名は配列の最初の要素への定数ポインタです。 したがって、宣言では
double balance[50];

balanceは&balance [0]へのポインタであり、これは配列のバランスの最初の要素のアドレスです。 したがって、以下のプログラムフラグメントは、pをbalanceの最初の要素のアドレスとして割り当てます
double *p;
double balance[10];

p = balance;

配列名を定数ポインタとして使用することは正当であり、その逆もあります。 したがって、*(残高+ 4)は残高[4]でデータにアクセスする正当な方法です。

最初の要素のアドレスを 'p'に格納すると、* p、*(p + 1)、*(p + 2)などを使用して配列要素にアクセスできます。 以下に、上で論じたすべての概念を示す例を示します

#include <stdio.h>

int main () {

   /* an array with 5 elements */
   double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
   double *p;
   int i;

   p = balance;
 
   /* output each array element's value */
   printf( "Array values using pointer\n");
 
   for ( i = 0; i < 5; i++ ) {
      printf("*(p + %d) : %f\n",  i, *(p + i) );
   }

   printf( "Array values using balance as address\n");
 
   for ( i = 0; i < 5; i++ ) {
      printf("*(balance + %d) : %f\n",  i, *(balance + i) );
   }
 
   return 0;
}
Array values using pointer
*(p + 0) : 1000.000000
*(p + 1) : 2.000000
*(p + 2) : 3.400000
*(p + 3) : 17.000000
*(p + 4) : 50.000000
Array values using balance as address
*(balance + 0) : 1000.000000
*(balance + 1) : 2.000000
*(balance + 2) : 3.400000
*(balance + 3) : 17.000000
*(balance + 4) : 50.000000

上記の例では、pはdoubleへのポインタです。つまり、double型の変数のアドレスを格納できます。 上記の例で示したように、pにアドレスがあると、* pはpに格納されているアドレスで利用可能な値を返します。


C - ポインタへのポインタ

ポインタへのポインタは、複数の間接的な形式、または一連のポインタです。 通常、ポインタには変数のアドレスが含まれます。 ポインタへのポインタを定義すると、最初のポインタには、次のように実際の値が格納されている位置を指す2番目のポインタのアドレスが格納されます。
Pointer to Pointer in C

ポインタへのポインタである変数は、そのように宣言されなければなりません。 これは、名前の前に追加のアスタリスクを置くことによって行われます。 例えば、次の宣言はint型のポインタへのポインタを宣言します
int **var;

ターゲット値がポインタへのポインタによって間接的に指されている場合、その値にアクセスするには、アスタリスク演算子を2回適用する必要があります(下の例を参照)。
#include <stdio.h>
 
int main () {

   int  var;
   int  *ptr;
   int  **pptr;

   var = 3000;

   /* take the address of var */
   ptr = &var;

   /* take the address of ptr using address of operator & */
   pptr = &ptr;

   /* take the value using pptr */
   printf("Value of var = %d\n", var );
   printf("Value available at *ptr = %d\n", *ptr );
   printf("Value available at **pptr = %d\n", **pptr);

   return 0;
}
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109


配列の詳細
配列はCにとって重要であり、もっと注意が必要です。 配列に関する以下の重要な概念は、Cプログラマには明らかであるべきです

Sr.No.Concept & Description
1Multi-dimensional arrays
C supports multidimensional arrays. The simplest form of the multidimensional array is the two-dimensional array.
2Passing arrays to functions
You can pass to the function a pointer to an array by specifying the array's name without an index.
3Return array from a function
C allows a function to return an array.
4Pointer to an array
You can generate a pointer to the first element of an array by simply specifying the array name, without any index.




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.














Interfaces and their protocol stacks

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