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。

C++中数组初始化,布布扣,bubuko.com

时间: 2024-11-05 02:25:02

C++中数组初始化的相关文章

vb中数组的初始化

vb中数组的初始化 问题: 计划使用数组存储以下值: "零分,班序,年名,序,组名,级名,总分3,总分5,总分9,总序,语序,数序,英序,物序,化序,政序,历序,地序,生序" 方法: 在vb中数组初始化比较麻烦 1.标准做法:     dim field(19) as string '需要手工计算下标上限     fiels(0)="零分" '逐行赋值     field(1)="班序"     ...     field(18)="生

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值

Java之路(四)数组初始化

本文主要讲数组的初始化方法.可变参数列表以及可变参数列表对函数重载的影响. 数组初始化 定义数组的方式: int[] arr1; 或  int arr1[]; 数组初始化 通过上边的定义,我们只是得到了一个数组的引用.这时已经为引用分配了存储空间,但是还没有给数组对象本身分配任何空间.想要给数组对象分配存储空间,必须使用初始化表达式. a.在数组创建的地方进行初始化,如: int[] arr1 = {1,2,3,4,5}; 这种方式等价于使用new来进行存储空间分配. b.给数组的引用赋值,如:

C++ 中数组做参数的分析

C++ 中数组做参数的分析 1.数组降价问题? "数组引用"以避免"数组降阶",数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是"数组降阶" 1 #include <IOSTREAM> 2 using namespace std; 3 4 void Test( char array[20] ) 5 { 6 cout << sizeof(array) << endl; // 输出 4

将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List<String> assetList = Arrays.asList(asset);

Objective-C中--&gt;数组和--&gt;字符串

一.    OC的数组成员是任意的对象指针    与C中的链表结构类似(以nil结尾)    一切的数组操作不能越界 OC的数组分为 -->不可变数组 NSArray -->    可变数组 NSMutableArray [cpp] view plain copy <pre name="code" class="objc">字符串数组初始化写法,相较于c++,比较奇怪.因为他是作为一个对象在实现对象实例初始化,整个格式都是这样. [cpp] 

Java/C++中数组的区别

1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是java.util.Arrays.详见Java数组方法的思考 2. 而在c++中数组名其实是一种数据结构,有人会说不是指针吗,关于这一点见(C++中数组名其实是一种数据结构). 从上面两点中我们可以看出java数组名是对象,而c++数组名是数据结构.那么有人又会问对象和数据结构又有什么区别呢?详见数据

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅