Showing posts with label 配列. Show all posts
Showing posts with label 配列. Show all posts

Sunday, September 2, 2018

Cでの関数引数としての配列の受け渡し

関数内で引数として一次元配列を渡したい場合は、以下の3つの方法のいずれかで仮引数を宣言し、3つの宣言方法すべてが同様の結果を生成する必要があります。 受け取る。 同様に、多次元配列を仮パラメータとして渡すことができます。

ウェイ1
ポインタとしての正式なパラメータ
void myFunction(int *param) {
   .
   .
   .
}

ウェイ-2
サイズの配列としての正式なパラメータ
void myFunction(int param[10]) {
   .
   .
   .
}

道 - 3
サイズの指定されていない配列としての正式なパラメータ
void myFunction(int param[]) {
   .
   .
   .
}



今度は、次の関数を考えてみましょう。これは、配列を別の引数と共に引数としてとり、渡された引数に基づいて、次のように配列を渡される数値の平均を返します
double getAverage(int arr[], int size) {

   int i;
   double avg;
   double sum = 0;

   for (i = 0; i < size; ++i) {
      sum += arr[i];
   }

   avg = sum / size;

   return avg;
}
さて、上記の関数を以下のように呼ぶ

#include <stdio.h>
 
/* function declaration */
double getAverage(int arr[], int size);

int main () {

   /* an int array with 5 elements */
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   /* pass pointer to the array as an argument */
   avg = getAverage( balance, 5 ) ;
 
   /* output the returned value */
   printf( "Average value is: %f ", avg );
    
   return 0;
}
Average value is: 214.400000

ご覧のように、配列の長さは、Cが仮パラメータの境界チェックを実行しないため、関数が関係する限り重要ではありません。



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に格納されているアドレスで利用可能な値を返します。


Saturday, September 1, 2018

C - 配列

同じ型の要素の固定サイズの順次コレクションを格納できる一種のデータ構造を配列します。 配列はデータのコレクションを格納するために使用されますが、配列を同じ型の変数のコレクションと考える方が便利です。

number0、number1、...、および number99 などの個々の変数を宣言する代わりに、数値などの配列変数を宣言し、数値[0]、数値[1]、および数値[99]を使用して 個々の変数。 配列内の特定の要素は、インデックスによってアクセスされます。

すべての配列は、連続したメモリ位置で構成されます。 最下位アドレスは最初の要素に対応し、最上位アドレスは最後の要素に対応します。

Arrays in C


配列の宣言
Cで配列を宣言するために、プログラマは配列の要素の型と要素の数を次のように指定します
type arrayName [ arraySize ];

これは一次元配列と呼ばれます。 arraySizeは、0より大きい整数定数でなければならず、typeは任意の有効なCデータ型です。 たとえば、balance型の10要素配列を宣言するには、次のステートメントを使用します。
double balance[10];

ここでbalanceは、最大10の倍数を保持するのに十分な可変配列です。


配列の初期化
Cで配列を1つずつ初期化するか、次のように1つのステートメントを使用して初期化することができます
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

中括弧{}の間の値の数は、大括弧[]の間の配列に対して宣言した要素の数より大きくすることはできません。
配列のサイズを省略すると、初期化を保持できるだけの大きさの配列が作成されます。 したがって、あなたが書く場合
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
前述の例とまったく同じ配列を作成します。 以下は、配列の1つの要素を割り当てる例です
balance[4] = 50.0;

上記のステートメントは配列の5番目の要素に値50.0を割り当てます。 すべての配列は、基数インデックスとも呼ばれる最初の要素のインデックスとして0を持ち、配列の最後のインデックスは、配列の合計サイズから1を引いたものになります。以下に、上で説明した配列の図を示します
Array Presentation



配列要素へのアクセス
要素には、配列名のインデックスを付けることによってアクセスされます。 これは、配列の名前の後に角括弧内の要素のインデックスを配置することによって行われます。 例えば

double salary = balance[9];
上記のステートメントは配列から10番目の要素をとり、その値を給与変数に代入します。 次の例は、前述の3つの概念すべてを使用する方法を示しています。 宣言、代入、および配列へのアクセス
#include <stdio.h>
 
int main () {

   int n[ 10 ]; /* n is an array of 10 integers */
   int i,j;
 
   /* initialize elements of array n to 0 */         
   for ( i = 0; i < 10; i++ ) {
      n[ i ] = i + 100; /* set element at location i to i + 100 */
   }
   
   /* output each array element's value */
   for (j = 0; j < 10; j++ ) {
      printf("Element[%d] = %d\n", j, n[j] );
   }
 
   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.





Interfaces and their protocol stacks

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