C++ code:数组初始化
具有初始化的数组定义,其元素个数可以省略,即方括号中的表达式可以省略。这时候,最后确定的元素个数取决于初始化值的个数。例如:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a[] = {1,2,3,4,5}; 6 for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) 7 cout << a[i] << " "; 8 cout << "\n"; 9 cin.get(); 10 return 0; 11 }
运行结果:
程序中,用了sizeof(a),即a数组的字节数。还有sizeof(a[0]),即第一个元素所占空间的字节数,因为是整形数组,所以相当于sizeof(int),在32位编译器中整形数程度长度为4。a数组有若干个元素,每个元素有sizeof(a[0])个字节,所以两者相除就是元素个数。这样表示的用意在于可维护性。(因为数组元素个数随着编程需要可能也会变化。在稍大一点的编程中,输入过程与处理过程往往分离,即中间相隔许多语句,所以,并不能一下子直观得看到数组元素个数的值,而根据数组名和其元素的信息,获取元素个数的方式,就带有很好的通用性。for循环的结构描述就无须跟着数组的初始化变动而改动了)
数组默认值:
对于没有初始化的数组,分两种情况:一种是全局数组和静态数组,也就是在函数外部定义的,或者加上static修饰的数组定义,其元素总是全被清零:另一种是局部数组,就是在函数内部定义的数组,它们的值是不确定的。例如:
1 #include<iostream> 2 using namespace std; 3 4 int array1[5] = { 1, 2, 3 }; 5 int array2[5]; 6 7 int main() 8 { 9 int array3[5] = {2}; 10 int array4[5]; 11 12 cout << "array1: "; 13 for (int i = 0; i < 5; ++i) 14 cout << array1[i] << " "; 15 16 cout << "\narray2: "; 17 for (int i = 0; i < 5; ++i) 18 cout << array2[i] << " "; 19 20 cout << "\narray3: "; 21 for (int i = 0; i < 5; ++i) 22 cout << array3[i] << " "; 23 24 cout << "\narray4: "; 25 for (int i = 0; i < 5; ++i) 26 cout << array4[i] << " "; 27 28 cout << "\n"; 29 30 cin.get(); 31 return 0; 32 }
数组的这种初始化规定方式源于程序运行的空间布局,函数中的局部数组是随着函数调用而创立的,而函数外部的数组是在整个程序运行中起作用的,驻于全局数据区,在运行起始时为0。
二维数组:
使用二维数组,可以按行、列下标访问对应元素。例如:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int array1[2][3] = {1,2,3,4,5}; 7 int array2[2][3] = { { 1, 2 }, {4} }; 8 9 cout << "array1: "; 10 for (int i = 0; i < 2; ++i) 11 for (int j = 0; j < 3; ++j) 12 cout << array1[i][j] << ", "; 13 14 cout << "\narray2: "; 15 for (int i = 0; i < 2; ++i) 16 for (int j = 0; j < 3; ++j) 17 cout << array2[i][j] << ", "; 18 19 cout << "\n"; 20 21 cin.get(); 22 return 0; 23 }
天雨虽宽,不润无根之草。
佛门虽广,不渡无缘之人。