zoukankan      html  css  js  c++  java
  • C++中数组初始化

     

    #include<iostream>
    using std::cout;
    using std::endl;
    int arr1[5];
    int arr2[5] = {1,3,5};
    int main()
    {
    int arr3[5];
    int arr4[5] = {2,4,6};
    int *pi1 = new int[5];
    int *pi2 = new int[5]();
    for(int i = 0; i != 5; i++)
       cout << arr1[i] << " ";
       cout << endl;
    for(int i = 0; i != 5; i++)
       cout << arr2[i] << " ";
       cout << endl;
    for(int i = 0; i != 5; i++)
       cout << arr3[i] << " ";
       cout << endl;
    for(int i = 0; i != 5; i++)
       cout << arr4[i] << " ";
       cout << endl;
    for(int i = 0; i != 5; i++)
       cout << *(pi1 + i) << " ";
       cout << endl;
    for(int i = 0; i != 5; i++)
       cout << *(pi2 + i) << " ";
       cout << endl;
    return 0;
    }

    Windows XP SP3下 Visual Studio 2005 编译执行的结果:

    Windows XP SP3下eclipse + CDT + MinGW 编译执行的结果:

    Ubuntu Linux 8.04下eclipse + CDT + g++ 编译执行的结果:

    由以上的三组结果中前四个数组的初始化结果是同样的,可得到下面结论:

    对于元素为内置类型的数组

    arr1:静态分配、定义在函数体外、未使用初始化列表显式初始化,元素都初始化为0;

    arr2:静态分配、定义在函数体外、初始化列表中未提供初值的元素初始化为0;

    arr3:静态分配、定义在函数体内、未使用初始化列表显式初始化,不正确元素进行初始化;

    arr4:静态分配、定义在函数体内、初始化列表中未提供初值的元素初始化为0;

    三组结果中的后两个数组初始化的结果似乎是依赖于编译器的,而MinGW与g++的结果竟然还不同(MinGW的结果也太诡异了)。当中第一组(MS编译器)初始化数组的结果和C++ Primer(第四版)中讲到的动态分配的数组初始化规则是一致的,即动态分配数组时,假设数组元素是内置类型,则无初始化,如pi1。也可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化,如pi2。

  • 相关阅读:
    日志_测试代码_Qt532
    SetParent
    【转】QT获取系统时间,以及设置日期格式
    JNI打通java和c
    Python 对图片进行人脸识别
    Python写黑客小工具,360免杀
    简单选择排序
    插入排序
    双向链表的实现
    记录安卓开发中的问题
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3837655.html
Copyright © 2011-2022 走看看