您现在的位置: 365建站网 > 365学习 > C语言和Java中给数组中的元素赋值的方法

C语言和Java中给数组中的元素赋值的方法

文章来源:365jz.com     点击数:669    更新时间:2017-12-01 09:04   参与评论
C语言中数组赋值

如果把单个变量看成是“游兵散勇”的话,那么数组对应的是“集团”。集团的“兵”就是我们前面说的数组的元素。这些“兵”不再有单独的名字,而是统一使用编号来区别,这个编号,我们称为“下标”。
在和数组打交道时,我们需要分清:是对整个数组操作,还是对数组中的单个元素进行操作。
 
1. 在定义数组时初始化。

普通变量可以在定义时同时赋初值:
int a = 100;
也可以在定义以后才赋值:
int a;
a = 100;
 
对于数组变量,则只能在定义时,对整个数组赋初值:
 
数据类型 数组变量名[个数] = {元素1初值,元素2初值,};
 
即,将初值用一对 {} ( 花括号 )括起来,相邻的值之间用逗号分隔。
 
比如:
int arr[10] = {9,8,7,6,5,4,3,2,1,0};
上面定义一了个数组 arr,共10个元素。初始值为从9到0。即,执行上面代码以后,arr[0]值为10,arr[1]值为9……arr[9]值为0。
 
在初始化赋值是时,注意所给值的个数不能超过数组的大小,比如:
int arr[10] = {10,9,8,7,6,5,4,3,2,1,0};  //错误!越界了
你定义了数组为10个元素,可是你却赋给它11个值,这称为数组越界:你在宾馆里预定了10间房,你却让11个人去住,多出的那个人挤在哪里呢?编译器遇上这类问题时,很明智地停了下来。
 
不过,你可以给它少于定义个数的初值:
int arr[10] = {9,8,7,5};               //允许
你定义了数组为10个元素,但你可以给它少于10个的初始值。那些没有得到初始值的元素值是多少呢?对于全局变量来说,将被编译器初始化为0,对于局部变量而言,则是未定义的值(不可预测的值)。如果只定义数组,没有对其进行任何初始化,同样适于本情况。所有元素的初值均依本数组是全局或局部变量而定,为0或未定义值。
 
可以跳过一两个元素不初始化吗?如:
int arr[10] =  {9,,7,,6};  //跳过中间的某些元素,C:OK;C++: Error。
因为我们主要学习C++,所以认为跳过数组中某些元素的初始化赋值是错误的。
也就是说,你尽可以先预定下多个房间,然后先只派部分人去住。不过C说:允许你们跳着房号住,而C++则要求依次住下,把空房留在后面。
 
你还可以不指定数组元素个数,直接通过对其初始化来让编译器得到它的实际个数:
 
int arr[] = {9,8,7};  //元素个数为: 3
即,在未指定义大小时,则初始值的个数就是数组元素的个数。
 
不过,你不能既不指定数组元素个数,也不进行初始化:
int arr[];   //Error, 到底是几个元素?
这也没有什么不好理解的,去几个人,就开几个房间。让宾馆老板自已去数人头,我们不必非得自已报人数——前提是,房客一个一个的都得事先现身。
 
2 .在定义之后为元素赋值

很多时候,我们无法在定义数组的同时就知道数组中各元素的值,所以,这时需要在定义以后各数组中的各个元素赋值。记住,此时只能对单个元素进行直接操作。这和普通变量不一样,下面的代码是错误的:
 
int arr[5];
...
arr[5] = {1,2,3,4,5}; //错,在编译器看来,arr[5]是数组arr的第6个元素。
//或
arr = {1,2,3,4,5};   //错,仍然不行。
这一点和普通变量不一样。也就是说,对数组整体的初始化,只能在定义时实行。
 
大都数情况,我们这样改变数组中某个元素的值:
 
int arr[5];
 
arr[0] = 95;
arr[1] = 89;
arr[2] = 100;
...
 
前面关于成绩管理的例子中,已经有过如何改变数组元素值的代码:cin >> cj[i]; 这一句将用户输入的成绩赋给数组cj中的第i个元素(i从0计起)。
 
两个数组可以相互赋值吗?答案也是不行:
 
int arr1[5] = {1,2,3,4,5};
int arr2[5];
 
arr2 = arr2; //不行!整个数组之间不能直接相互赋值。
 
你可能很不理解为什么上面的代码会出错,不过在学习后面有关指针及内存地址的更多知识以后,你会明白。现在我们只能告诉你,以我们的所学,可以方便地用一个循环来 实现将一个数组内的值全部赋值给另一个数组,这也称为数组间的拷贝。
 

for(int i=0;i<5;i++)
{
    arr2[i] = arr1[i]; //正确,数组元素之间可以相互赋值。
}

 
当然,这样做可一定要注意:当两个数组的元素个数不一致时,不要越界访问:
 

int arr1[5] = {1,2,3,4,5};
int arr2[6];
 
for(int i = 0;i<6;i++)  // i 从 0 到 5
{
    arr2[i] = arr1[i];
}

 
arr2有6个元素,而arr1只有5个。当循环执行到 i为5时,访问arr1[5]将造成越界。
(越界可以直观地理解为“越出边界“,即越出数组的边界,访问到了数组以外的内存,其内容将是未知的。)

JAVA中数组的定义格式以及赋值

JAVA中数组的定义格式有如下三种:
第一中方式:int[] arr = new int[3];
第二种方式:int[] arr1= new int [] {1,2,3,4,5};
第三种方式:int[] arr2 = {1,2,3,4,5};

int[] 表示定义一个整数类型的数组。左边 int[] arr 属于应用类型存放在占内存中, 而堆内存中会开辟一条空间用于存储 new出来的对象。并把地址值 赋值给arr
数组在堆内存中存储时,是有索引的,其索引是从0开始。每一个索引都代表着数组中的数,因而我们可以为数组中的元素赋值。
arr[0] = 2;
arr[1] = 3;
arr[2] = 4;
以上是为数组arr中的索引为0,1,2位置上的数分别赋值为2,3,4;
我们可以对这部分数组进行打印,

System.out.print("[");
for(int x = 0; x < arr.length; x++) {
if(x != arr.length - 1) {
System.out.print(arr[x] + ",");
}
else {
System.out.println(arr[x] + "]");
}
}

第二种方式与第一种方式类似。只不过是在后面直接给数组进行赋值, 需要注意的是new int[] ,的括号中不能够制定数组中存放元素的个数,因为我们不清楚后面定义的数组个数。如果写了个数,jvm虚拟机在运行的时候会报错。
第三种方式属于直接赋值的方式。定义arr2的数组,用于存放整数型数组。后边大括号里面直接可以给出数组。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (669人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------