数组知识查漏补缺

1  数组的基本知识

数组变量array就是此数组的首地址,它与&array[0]等价;同时array的地址也不能改变。也就是说,你不能把数组变量array放到等号的左边,也不能对其运行自增减运算符,如array++和--array等。

C语言中支持int array[]={1,2,3}这种写法,但是这种写法也隐含地指定了数组的长度。

 

2  数组初始化和数组之间赋值

程序9-1  数组的初始化:

int array[3]; /* array中元素为随机值*/
int array[3] = {1};
int array[3] = {1,2,3};

for(int i = 0;i<3;i++)
{
    array[i] = 0;
}

memset(array,0,sizeof(array));

 

程序9-1中第1行,当我们通过int array[3];定义一个数组的时候,其中的元素是随机数。第2行中,当我们指定第一个元素的值以后,后面的元素全部为零。当然,你也可以通过第3行的方法,对数组中每一个元素都进行初始化。定义并同时初始化一个变量是一个好习惯,可以避免一些隐含的错误。对数组变量来说,这一原则也同样适用。

如果你想把一个数组的全部元素赋值为0,可以通过一个循环完成,如程序9-1的第4~6行所示。一个更简单的办法就是利用程序9-1中第7行的memset函数来完成这个任务。当数组的元素比较多的时候,这种方法的效率明显高于使用循环的方法。

 

在9.1节介绍过,数组名不能放到等号左边。如果你想把数组b赋值给数组a,程序9-2中第3~5行给出了正确的方法。既然能通过memset函数来初始化一块内存,那么能不能直接复制一段内存呢?如果能,数组间的赋值就可以避免使用循环操作了。没错,C库函数还提供一个函数memcpy,这个函数用于将一块内存拷贝到另一块内存。程序9-2中的第6行演示了这种用法。注意其中sizeof的用法。

程序9-2  数组不支持直接赋值

int array[3] = {1,2,3},b[3];
b=a;  /*错误,不能把b放到左值*/

/*数组间赋值之循环方法*/
for(int i = 0;i<3;i++)
{
    array[i] = 0;
}

/*数组间赋值之高效方法*/
memset(array,0,sizeof(array));

 

posted @ 2017-05-08 17:11  ren_zhg1992  阅读(147)  评论(0)    收藏  举报