c++数组初始化(c++数组长度怎么获取)

admin 506 0

大家好,今天小编来为大家解答以下的问题,关于c++数组初始化,c++数组长度怎么获取这个很多人还不知道,现在让我们一起来看看吧!

一、c++二维数组初始化

1、数据类型数组名[整常量表达式][整常量表达式]={初始化数据};

2、在{}中给出各数组元素的初值,各初值之间用逗号分开。把{}中的初值依次赋给各数组元素。

3、int a[2][3]={{1,2,3},{4,5,6}};

4、在{}内部再用{}把各行分开,第一对{}中的初值1,2,3是0行的3个元素的初值。第二对{}中的初值4,5,6是1行的3个元素的初值。相当于执行如下语句:

5、a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

6、注意,初始化的数据个数不能超过数组元素的个数,否则出错。

7、int a[2][3]={ 1,2,3,4,5,6};

8、把{}中的数据依次赋给a数组各元素(按行赋值)。即a[0][0]=1; a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

9、static int a[2][3]={{1,2},{4}};

10、第一行只有2个初值,按顺序分别赋给a[0][0]和a[0][1];第二行的初值4赋给a[1][0]。由于存储类型是static,故其它数组元素的初值为0。注:某些C语言系统(如:Turbo C)中,存储类型不是static的变量或数组的初值也是0。

11、只有2个初值,即a[0][0]=1,a[0][1]=2,其余数组元素的初值均为0。

12、⑷可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维的长度可以确定第一维的长度。

13、int a[ ][3]={ 1,2,3,4,5,6};

14、a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2。

15、一般,省略第一维的定义时,第一维的大小按如下规则确定:

16、初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。例如,int a[ ][3]={ 1,2,3,4};等价于:int a[2][3]={ 1,2,3,4};

17、若分行初始化,也可以省略第一维的定义。下列的数组定义中有两对{},已经表示a数组有两行。

18、static int a[ ][3]={{1,2},{4}};

二、c++中多维数组如何进行初始化

1、不管是多维数组还是一维数组,其实都是一个意思,它们存放在内存当中都是连续的,只是表示的方法不一样而已。

2、要用数组首先要清楚,一个数组在定义时长度已经是确定了的(即数组元素个数确定),确定了编译器才知道分多少内存给这个数组,不然编译出错。如果你在定义数组时没有说明数组长度,只给出数组各个元素的值,编译器会根据给出的元素值的个数确定数组长度。下面的两种情况:

3、char arr1[8]={3,3};//数组长度为8能表示到arr1[7]

4、char arr2[ ]={3,3};//数组长度为2只能表示到arr2[1]

5、这里有个默认值的说法。没初始化的数组元素它们都默认为0。也就是说,在你定义一个数组时已经确定了它的长度,如果你不初始化它们,默认都为0。

6、你的程序中{3}只是对第一个元素给出了3,其它的都没有初始值,默认为0。

7、给你个建议,如果你嫌你定义的数组太大了,每个都要写个3,太痛苦了,可以来三层循环:

三、C++数组的初始化

在c++ primer fourth edition上在描述数组的初始化时,有这样一句话:

数组的维数必须用值大于等于 1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型 const对象。非 const变量以及要到运行阶段才知道其值的 const变量都不能用于定义数组的维数。

但以下测试程序在gcc编译器下,用非const常量作为数组初始化的维数也没有报错,网上查了资料,原来这是C99的标准,C89的版本是不支持非const定义数组维数的,gcc编译器内部做了优化,但没有测试VS编译器下是否通过。

/*const*/unsignedintbuf_size=3;

for(unsignedintindex=0;index!=buf_size;index++){

for(unsignedintindex=0;index!=buf_size;index++){

cout<<endl;

但是用直接初始化数组的方式却不通过编译:error: variable-sized object'str_array' may not be initialize

但是用直接初始化数组的方式却不通过编译:error: variable-sized object'str_array' may not be initialize

stringstr_array[max_size]={"aa","bb","cc"};

针对于此,显示初始化数组,无需指定维数:

针对于此,显示初始化数组,无需指定维数:

stringstr_array[]={"aa","bb","cc"};

关于字符数组:

//error:initializer-stringforarrayofcharsistoolong[-fpermissive]

chararr_1[3]="abc";//维数是4,相当于chararr_1[3]={'a','b','c','\0'},'\0'为空字符串

chararr_2[3]={'a','b','c'};//维数是3

与vector不一样,数组不允许直接复制和赋值

与vector不一样,数组不允许直接复制和赋值

intia[]={0,1,2};//ok:arrayofints

intia2[]=ia;//error:initializerfailstodeterminesizeof'ia2'

intia3[](ia);//error:initializerfailstodeterminesizeof'ia3'

对于的数组的初始化,如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:

对于的数组的初始化,如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:

1、在函数体外定义的内置数组,其元素均初始化为 0;

2、在函数体内定义的内置数组,其元素无初始化;

3、不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;

4、如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。

四、c语言中怎么把一维数组初始化为全零啊,不用循环

如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0。因此,当只将第一个元素初始化为0时,编译器会自动将其他元素设为0(就像前一句说的那样)。

3.用memset函数在程序开始时初始化数组。比如:

memset()函数原型是extern void*memset(void*buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。

函数解释:将s中当前位置后面的n个字节(typedef unsigned int size_t)用 ch替换并返回 s。

memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法,它通常为新申请的内存做初始化工作。

五、C++中怎么把一个bool型的数组初始化

首先,是C和C++数组清零的问题。可以使用memset(v,0,sizeof(v));将数组在初始化,此处因为我们要用的是bool型数组,所以,要清空。

在就是C语言中没有布尔型bool,所以,他的判断是0就是假false,其他的就是真true;

在就是C++语言中布尔型,定义了,要初始化,可以初始化为true,也可以初始化为false.不然,就不能编译了。C++中布尔型初始化还是可以同样使用memset(v,true,sizeof(v));初始化为true;

最让人头疼的是Java中数组的输入,和其他的输入问题:

下面这个小程序可以输入一组数据。但是是以ASCII码形式输出的。弄了很久也没有找到怎么转换,强行转换,会掉一些数据的,比如,有5个数,但是你强行转换后,输出只有前三个数了。

Java中输入数据一个一个的输,要有提示,是很好输的,可是连续输入数据,还真的有点难。希望大家给点建议。

public static void main(String []args) throws IOException

BufferedInputStream br= new BufferedInputStream(System.in);

for(int i=0;i<=my.length-1;i++)

for(int j=0;j<=my.length-1;j++)

/*输入一个数组,比如输入为1 2 3 4 5

*但是输出是ASCII码。为49 32 50 32 51.

关于c++数组初始化到此分享完毕,希望能帮助到您。