• 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。

  • 相关阅读:
    Win10/UWP开发-Ink墨迹书写
    Win10/UWP 让你的App使用上扫描仪
    Win10/UWP新特性—Drag&Drop 拖出元素到其他App
    UWP/Win10新特性系列—Drag&Drop 拖动打开文件
    1、WIN2D学习记录(win2d实现JS雨天效果)
    Windows 通用应用尝试开发 “51单片机汇编”总结
    D2.Reactjs 操作事件、状态改变、路由
    D1.1.利用npm(webpack)构建基本reactJS项目
    UWP 动画系列之模仿网易云音乐动画
    字符设备驱动之Led驱动学习记录
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3837655.html
Copyright © 2020-2023  润新知