C++ における配列の初期化にはどのような種類がありますか?

coldplay.xixi
リリース: 2020-09-12 10:05:55
オリジナル
14361 人が閲覧しました

c 配列の初期化のタイプには、1. 整数配列の初期化、2. 文字列の初期化、3. 配列のデフォルトの初期化、4. 配列のヒープ初期化が含まれます。

C++ における配列の初期化にはどのような種類がありますか?

c 配列の初期化の種類は次のとおりです:

1. 整数配列の初期化 - スタックの初期化

//默认初始化
int a[5] = {};    //[0, 0, 0, 0, 0]
//全部初始化为0
int a[5] = {0};    //[0, 0, 0, 0, 0]
//c++11新写法
int a[5]{};    //[0, 0, 0, 0, 0]
//注意,想要整型数组 全部初始化为1的时候不能粗暴的设置为 
int a[5] = {1};    //[1, 0, 0, 0, 0]
// 因为 数组初始化列表中的元素个数小于指定的数组长度时, 不足的元素以默认值填补。
//可以分别赋值
int a[5] = {1,1,1,1,1}; //[1,1,1,1,1]
ログイン後にコピー

2. 文字列の初期化 - スタックの初期化

# は基本的に整数の初期化と同じであり、コンストラクターは

string *str = string[5];    //调用5次默认构造函数
string *str1 = string[5]{"aaa"};    //数组中的第一个元素调用 string::string(const char *)  进行初始化。后面四个调用 默认构造函数
ログイン後にコピー
## と呼ばれます。

#3. 配列のデフォルトの初期化

初期化リストが明示的に指定されていない場合、基本型は初期化されず (グローバル変数と静的変数を除く)、すべてのメモリが初期化されます。ダーティ データ、および自動的に定義されたクラス タイプは、初期化のために各要素のデフォルト コンストラクターを呼び出します

#
int a[5]{};
a[6];      //32766
a[10];    //1474921429
// Xcode会提示 Array index 10 is past the end of the array (which contains 5 elements)。虽然不会爆红,但是Xcode提示越界了。这在程序中也是需要特别注意的,越界时会取到脏数据。
string str[5];     //["","","","",""]
string str1[5] = {"","2","",""};     //["","2","',"",""]
string str2[5] = {"a"};     //["a","","","",""]
ログイン後にコピー

4. 配列のヒープ初期化

#

int *a = new int[5];        //脏数据数组
int *str = new string[5];    //空字符串数组
int *b = new int[5]{0};    //   [0,0,0,0,0]
int *str1 = new string[5] {"aaa"};    //["aaa","","","",""]
//以上几行代码遵循栈中数组的初始化规则,除此之外这里还有一个新语法
int *c = new int[5]();    //[0,0,0,0,0]
//该语法后面的一对圆括号,表示使用默认值初始化整个数组,所以对于类类型来说,new string[5] 与 new string[5]() 是等价的,都会调用默认构造函数进行初始化;但是对于基本类型就不同了。new int[5]根本不会初始化,而new int[5]()则会使用int()的值,即0进行初始化。
ログイン後にコピー
[関連学習の推奨:
C 言語チュートリアル ビデオ

]

以上がC++ における配列の初期化にはどのような種類がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート