C++配列を初期化する方法

Oct 15, 2021 pm 02:09 PM
配列 c++

c 配列を初期化する方法: 1. 最初に配列を定義し、次に配列に値を割り当てます。構文は、「データ型配列名 [長さ]; 配列名 [添字] = 値;」です。 2. 配列定義時に配列を初期化します。「データ型配列名[長さ] = [値のリスト]」の構文です。

C++配列を初期化する方法

このチュートリアルの動作環境: Windows 7 システム、C 17 バージョン、Dell G3 コンピューター。

変数値を入力するよりも、プログラム内で変数値を設定する方が適切な場合があります。ただし、配列の要素ごとに個別の代入ステートメントを記述すると、特に大規模な配列の場合、多くの入力が必要になる可能性があります。

たとえば、プログラムを考えてみます:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    int days[NUM_MONTHS];
    days[0] = 31; // January
    days[1] = 28; // February
    days[2] = 31; // March
    days[3] = 30; // April
    days[4] = 31; // May
    days[5] = 30; // June
    days[6] = 31; // July
    days[7] = 31; // August
    days[8] = 30; // September
    days[9] = 31; // October
    days[10] = 30; // November
    days[11] = 31; // December
    for (int month = 0; month < NUM_MONTHS; month++)
    {
        cout << "Month "<< setw (2) << (month+1) << " has ";
        cout << days[month] << " days.\n";
    }
    return 0;
}
ログイン後にコピー

プログラム出力:

Month  1 has 31 days.
Month  2 has 28 days.
Month  3 has 31 days.
Month  4 has 30 days.
Month  5 has 31 days.
Month  6 has 30 days.
Month  7 has 31 days.
Month  8 has 31 days.
Month  9 has 30 days.
Month 10 has 31 days.
Month 11 has 30 days.
Month 12 has 31 days.
ログイン後にコピー

幸いなことに、C では配列の定義時に初期化できるオプションがあります。初期化子リストを使用すると、配列の作成時に配列のすべての要素を簡単に初期化できます。次のステートメントは、days 配列を定義し、前のプログラムの一連の代入ステートメントによって確立されたのと同じ値で初期化します。

int days [NUM_MONTHS] = {31,28,31,30,31,30,31,31,30,31,30, 31};
ログイン後にコピー

値は、次の順序で配列要素に格納されます。それらはリストに表示されます (最初の値 31 は days[0] に格納され、2 番目の値 28 は days[1] に格納されます)。次の図は、初期化後の配列の内容を示しています。

C++配列を初期化する方法

次のプログラムは、上記のプログラムを修正したものです。 days 配列は、別の代入ステートメントを使用するのではなく、作成時に初期化されます。初期化リストは複数行にまたがっていることに注意してください。このプログラムは、月の名前を保持する文字列オブジェクトの配列も追加します。

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
    int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for (int month = 0; month < NUM_MONTHS; month++)
    {
        cout << setw(9) << left << name[month] << " has ";
        cout << days [month] << " days. \n";
    }
    return 0;
}
ログイン後にコピー

プログラム出力:

January   has 31 days.
February  has 28 days.
March     has 31 days.
April     has 30 days.
May       has 31 days.
June      has 30 days.
July      has 31 days.
August    has 31 days.
September has 30 days.
october   has 31 days.
November  has 30 days.
December  has 31 days.
ログイン後にコピー

これまで、配列に数値を入力する方法と、次に、すべての値を表示します。ただし、配列から特定の値を取得するなど、さらに多くの機能が必要になる場合があります。次のプログラムは、ユーザーが選択した月の日数を表示する上記のプログラムのバリエーションです。

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    int choice;
    string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
    int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    cout << "This program will tell you how many days are "<< "in any month.\n\n";
    // Display the months
    for (int month = 1; month <= NUM_MONTHS; month++)
        cout << setw (2) << month << " " << name [month-1] << endl;
    cout << "\nEnter the number of the month you want: ";
    cin >> choice;
    // Use the choice the user entered to get the name of
    // the month and its number of days from the arrays.
    cout << "The month of " << name [choice-1] << " has " << days[choice-1] << " days.\n";
    return 0;
}
ログイン後にコピー

プログラムの出力は次のとおりです:

This program will tell you how many days are in any month.

1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 october
11 November
12 December

Enter the number of the month you want: 4
The month of April has 30 days.
ログイン後にコピー

配列要素 1 から開始

実世界 1 から始まるモデルを構築する場合、多くの教師は生徒に要素 0 を使用せず、要素 1 から実際のデータの保存を開始することを好みます。年の月数が良い例です。この場合、name 配列と days 配列をそれぞれ 13 個の要素を持つように宣言し、次のように初期化できます。

string name[NUM_MONTHS+1]={" ", "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
int days[NUM_MONTHS+1] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
ログイン後にコピー

配列要素 0 は使用されないことに注意してください。それは単なる仮想的な値です。これにより、1 月の名前が name[1] に保存され、2 月の名前が name[2] に保存されます。同様に、1 月の日数は days[1] 要素に格納され、2 月の日数は days[2] 要素に格納されます。

上記のメソッドを使用して配列を定義および初期化する場合、ループを次の形式に書き換える必要があります。以前のように要素 0 ~ 11 の代わりに、配列要素 1 ~ 12 の内容が表示されます。

for (int month = 1; month <= NUM_MONTHS; month++)
{
    cout << setw(9) << left << name[month] << " has ";
    cout << days[month] << " days.\n";
}
ログイン後にコピー

実際のデータが要素 1 から始まるように保存されている場合、特定のデータを見つけるために配列の添字に 1 を追加する必要はありません。以下は、各月の番号と名前をリストするステートメントの変更です。

for (int month = 1; month <= NUM_MONTHS; month++)
    cout << setw (2) << month << " " << name [month] << endl;
ログイン後にコピー

ユーザーが選択した月の日数を表示するコードは、次のように変更する必要があります。

cout << "The month of " << name[choice] << " has "<< days [choice] << " days . \n";
ログイン後にコピー

配列の部分初期化

配列を初期化するとき、C は各要素の値を取得する必要はなく、各要素の値を取得することもできます。初期化するだけです。以下に示すように、配列の一部です。

int numbers[7] = {1, 2, 4, 8};
ログイン後にコピー

この定義は、以下に示すように、7 要素の配列の最初の 4 要素のみを初期化します。

C++配列を初期化する方法
図 2

図 2 の初期化されていない要素はすべて 0 に設定されることに注意してください。これは、数値配列が部分的に初期化されるときに起こることです。文字列オブジェクトの配列が部分的に初期化されると、初期化されていない要素にはすべて空の文字列、つまり長さ 0 の文字列が含まれます。これは、部分的に初期化された配列がローカルに定義されている場合にも当てはまります。ただし、ローカル配列が完全に初期化されていない場合、他のローカル変数と同様に、その要素には「ガベージ」が含まれます。

次のプログラムは、部分初期化後の数値配列の内容を示しています。

#include <iostream>
using namespace std;
int main ()
{
    const int SIZE = 7;
    int numbers[SIZE] = {1, 2, 4, 8}; // Initialize the first 4 elements
    cout << "Here are the contents of the array: \n";
    for (int index = 0; index < SIZE; index++)
    cout << numbers [index] << " ";
    cout << endl;
    return 0;
}
ログイン後にコピー

プログラム出力:

Here are the contents of the array:
1 2 4 8 0 0 0
ログイン後にコピー

ただし、配列初期化リストの値は、配列の要素 配列要素よりも少ない値は許可されますが、それ以上の値は許可されません。数値配列には 7 つの値しか含めることができませんが、初期化リストには 8 つの値が含まれるため、次のステートメントは無効です。

int numbers [7] = {1, 2, 4, 8, 3, 5, 7, 9};    //不合法
ログイン後にコピー

また、要素が初期化されないままになっている場合は、その要素以降のすべての要素も初期化されないままにしておく必要があります。 C には、初期化リスト内の要素をスキップする方法がありません。別の不正な例を次に示します:

int numbers [7] = {1, , 4, , 3, 5, 7};    // 不合法
ログイン後にコピー

暗黙的な配列サイズ

可以通过提供一个包含每个元素值的初始化列表来定义一个数组而不指定它的大小。C++ 会计算初始化列表中的项目数,并为数组提供相应数量的元素。例如,以下定义创建 了一个包含5个元素的数组:

double ratings [] = {1.0,1.5,2.0,2.5,3.0};
ログイン後にコピー

注意,如果省略大小声明符,则必须指定一个初始化列表。否则,C++ 不知道该数组有多大。

初始化变量的新方法

到目前为止,已经介绍过的定义和初始化常规变量的方法是使用赋值语句,示例如下:

int value = 5;
ログイン後にコピー

但是,我们已经学习过使用函数、数组以及类,所以现在是时候来介绍另外两种在定义变量的同时即进行初始化的方法。

第一种新方法是使用函数符号初始化变量。它看起来就像是给一个函数传递参数。如果您已经掌握了类的内容,那么就会注意到,它也很像是在创建类对象时给一个构造函数传递值。以下是使用函数符号定义变量 value 并初始化其值为 5 的示例语句:

int value (5);
ログイン後にコピー

第二种初始化变量的新方法是 C++ 11 中新引入的,使用大括号表示法。它看起来就像是刚刚上面所看到的初始化数组的方法,但是其中有两点区别:

  • 因为常规变量只能一次保存一个值,所以通过这种方法初始化变量时,大括号中只有一个值;

  • 和数组初始化列表不一样,通过这种方法初始化变量时,在大括号前面没有赋值运算符(=)。

以下是使用大括号表示法定义变量 value 并初始化其值为5的示例语句。

int value{5}; //该语句仅在C++ 11或更高版本中合法
ログイン後にコピー

绝大多数程序员会继续使用赋值运算符来初始化常规变量,本书也将如此,但是,大括号表示法提供了一项优点,它会检查用来初始化变量的值,并确保匹配变量的数据类型。例如,假设 doubleVal 是一个 double 类型变量,存储在其中的值为 6.2。则使用赋值运算符时,可以编写以下两种形式的语句之一:

int valuel = 4.9;    //该语句将给valuel赋值为。4
int vaule2 = doubleVal;    // 该语句将给 value2 赋值为 6
ログイン後にコピー

在这两种情况下,值的小数点部分都会被先截断,然后才赋值给被定义的变量。这虽然可能会导致一些问题,但 C++ 编译器是允许的,它也会提出警告,但却仍然能生成可执行文件,并且可以运行。不过,如果在这里使用的是大括号表示法,则编译器会指出这些语句产生了一个错误,并且不会生成可执行文件。必须先修复该错误,然后重新编译项目才能运行该程序。

相关推荐:《C++视频教程

以上がC++配列を初期化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

マルチスレッドをC言語で実装する4つの方法 マルチスレッドをC言語で実装する4つの方法 Apr 03, 2025 pm 03:00 PM

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

c-subscript 3 subscript 5 c-subscript 3 subscript 5アルゴリズムチュートリアルを計算する方法 c-subscript 3 subscript 5 c-subscript 3 subscript 5アルゴリズムチュートリアルを計算する方法 Apr 03, 2025 pm 10:33 PM

C35の計算は、本質的に組み合わせ数学であり、5つの要素のうち3つから選択された組み合わせの数を表します。計算式はC53 = 5です! /(3! * 2!)。これは、ループで直接計算して効率を向上させ、オーバーフローを避けることができます。さらに、組み合わせの性質を理解し、効率的な計算方法をマスターすることは、確率統計、暗号化、アルゴリズム設計などの分野で多くの問題を解決するために重要です。

個別の関数使用距離関数C使用チュートリアル 個別の関数使用距離関数C使用チュートリアル Apr 03, 2025 pm 10:27 PM

std :: uniqueは、コンテナ内の隣接する複製要素を削除し、最後まで動かし、最初の複製要素を指すイテレーターを返します。 STD ::距離は、2つの反復器間の距離、つまり、指す要素の数を計算します。これらの2つの機能は、コードを最適化して効率を改善するのに役立ちますが、隣接する複製要素をstd ::のみ取引するというような、注意すべき落とし穴もあります。 STD ::非ランダムアクセスイテレーターを扱う場合、距離は効率が低くなります。これらの機能とベストプラクティスを習得することにより、これら2つの機能の力を完全に活用できます。

C言語でヘビの命名法を適用する方法は? C言語でヘビの命名法を適用する方法は? Apr 03, 2025 pm 01:03 PM

C言語では、Snake命名法はコーディングスタイルの慣習であり、アンダースコアを使用して複数の単語を接続して可変名または関数名を形成して読みやすくします。編集と操作、長い命名、IDEサポートの問題、および歴史的な荷物を考慮する必要がありますが、それは影響しませんが。

c c Apr 04, 2025 am 07:54 AM

CのRelease_Semaphore関数は、取得したセマフォをリリースするために使用され、他のスレッドまたはプロセスが共有リソースにアクセスできるようにします。セマフォのカウントを1増加し、ブロッキングスレッドが実行を継続できるようにします。

dev-cバージョンの問題 dev-cバージョンの問題 Apr 03, 2025 pm 07:33 PM

dev-c 4.9.9.2コンピレーションエラーとソリューションdev-c 4.9.9.2を使用してWindows 11システムでプログラムをコンパイルする場合、コンパイラレコードペインには次のエラーメッセージが表示されます。gcc.exe:internalerror:aborted(programcollect2)pleaseubmitafullbugreport.seeforintructions。最終的な「コンピレーションは成功しています」ですが、実際のプログラムは実行できず、エラーメッセージ「元のコードアーカイブはコンパイルできません」がポップアップします。これは通常、リンカーが収集されるためです

Cおよびシステムプログラミング:低レベルのコントロールとハードウェアの相互作用 Cおよびシステムプログラミング:低レベルのコントロールとハードウェアの相互作用 Apr 06, 2025 am 12:06 AM

Cは、ハードウェアに近い制御機能とオブジェクト指向プログラミングの強力な機能を提供するため、システムプログラミングとハードウェアの相互作用に適しています。 1)cポインター、メモリ管理、ビット操作などの低レベルの機能、効率的なシステムレベル操作を実現できます。 2)ハードウェアの相互作用はデバイスドライバーを介して実装され、Cはこれらのドライバーを書き込み、ハードウェアデバイスとの通信を処理できます。

See all articles