如何给数组中的元素赋值?
如果把单个变量看成是“游兵散勇”的话,那么数组对应的是“集团”。集团的“兵”就是我们前⾯说的数组的元素。这些“兵”不再有单独的名字,⽽是统⼀使⽤编号来区别,这个编号,我们称为“下标”。
在和数组打交道时,我们需要分清:是对整个数组操作,还是对数组中的单个元素进⾏操作。
. 在定义数组时初始化。
普通变量可以在定义时同时赋初值:
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++: Erro r。
因为我们主要学习C++,所以认为跳过数组中某些元素的初始化赋值是错误的。
也就是说,你尽可以先预定下多个房间,然后先只派部分⼈去住。不过C说:允许你们跳着房号住,⽽C++则要求依次住下,把空房留在后⾯。
你还可以不指定数组元素个数,直接通过对其初始化来让编译器得到它的实际个数:
int arr[] = {9,8,7};  //元素个数为: 3
即,在未指定义⼤⼩时,则初始值的个数就是数组元素的个数。
不过,你不能既不指定数组元素个数,也不进⾏初始化:
数组定义时初始化
int arr[];  //Error, 到底是⼏个元素?
这也没有什么不好理解的,去⼏个⼈,就开⼏个房间。让宾馆⽼板⾃已去数⼈头,我们不必⾮得⾃已报⼈数——前提是,房客⼀个⼀个的都得事先现⾝。
.在定义之后为元素赋值
很多时候,我们⽆法在定义数组的同时就知道数组中各元素的值,所以,这时需要在定义以后各数组中的各个元素赋值。记住,此时只能对单个元素进⾏直接操作。这和普通变量不⼀样,下⾯的代码是错误的:
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]将造成越界。
(越界可以直观地理解为“越出边界“,即越出数组的边界,访问到了数组以外的内存,其内容将是未知的。)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。