Cで指定されたイニシャライザー
C90標準では、位置0、1、2のインデックスを初期化するなど、固定された順序で配列を初期化する必要があります。 C99標準から、Cで指定された初期化機能が導入されました。ここでは、要素をランダムな順序で初期化できます。初期化は、配列インデックスまたは構造体メンバーを使用して実行できます。この拡張機能はGNUC++では実装されていません。
インデックスを指定して値を入力すると、次のようになります-
int arr[6] = {[3] = 20, [5] = 40}; or int arr[6] = {[3]20, [5]40};
これはこれと同等です:
int arr[6] = {0, 0, 0, 20, 0, 40};
次の構文を使用して、いくつかの範囲の要素を配置することもできます:[first…last]=value。
int arr[6] = {[2 … 4] = 10};
これはこれと同等です:
int arr[6] = {0, 0, 10, 10, 10, 0};
配列のサイズが定義されていない場合は、最大インデックス位置からサイズを取得できます。より良いアイデアを得るためにコードを見てみましょう。
サンプルコード
#include <stdio.h> int main() { int Array[] = {10, 20, 30, [3 ... 9] = 100, [10] = 65, 15, [80] = 50, [42] = 400 }; int i; for (i = 0; i < 20; i++) printf("%d ", Array[i]); printf("\nArray[%d] = %d\n",80, Array[80]); printf("Array[%d] = %d\n",42, Array[42]); printf("Size of this array: %ld\n", sizeof(Array) / sizeof(Array[0])); }
出力
10 20 30 100 100 100 100 100 100 100 65 15 0 0 0 0 0 0 0 0 Array[80] = 50 Array[42] = 400 Size of this array: 81
この指定された初期化は、構造体または共用体タイプのオブジェクトに対しても実行できます。それらの場合、最初に1つのドット(。)が付いたメンバー変数の名前を使用して、変数を任意の順序で初期化できます。明確なアイデアを得るには、以下のコードを確認してください。
サンプルコード
#include <stdio.h> struct myStruct { int x; float y; char z; }; int main() { struct myStruct str1 = {.y = 2.324, .z = 'f', .x = 78}; struct myStruct str2 = {.z = 'r'}; printf ("x = %d, y = %f, z = %c\n", str1.x, str1.y, str1.z); printf ("z = %c\n", str2.z); }
出力
x = 78, y = 2.324000, z = f z = r
-
Cで指定されたイニシャライザー
C90標準では、位置0、1、2のインデックスを初期化するなど、固定された順序で配列を初期化する必要があります。 C99標準から、Cで指定された初期化機能が導入されました。ここでは、要素をランダムな順序で初期化できます。初期化は、配列インデックスまたは構造体メンバーを使用して実行できます。この拡張機能はGNUC++では実装されていません。 インデックスを指定して値を入力すると、次のようになります- int arr[6] = {[3] = 20, [5] = 40}; or int arr[6] = {[3]20, [5]40}; これはこれと同等です: int arr[6] = {0, 0,
-
C++17の初期化子を使用したElseおよびSwitchステートメント
多くの場合、関数によって返されるものの値を検証し、この値に基づいて条件付き操作を実行する必要があります。したがって、コードを以下に示します- // Some method or function return_type foo(Params) // Call function with Params and // store return in var1 auto var1 = foo(Params); if (var1 == /* some value */) { //Perform Something } else { //Perform