C语言小结--数组

来源:互联网 发布:java 标记方法过时 编辑:程序博客网 时间:2024/05/18 00:46

1、什么是数组

(1)从内从角度来说,数组就是一次分配多个变量,而且这些多个变量在内存中是依次相连的。
(2)从编译器角度来说,数组变量也是变量,和普通变量没有什么本质区别,变量的本质就是一个地址,这个地址在编译器中决定具体的数值,变量名和具体数值绑定,变量类型决定这个地址的延续长度。

2、为什么需要数组

数组作为C语言一种非常重要的数据类型,是为了解决一长串相似功能变量的定义,比如一个班级有20个同学,需要统计20个同学的身高信息,我们可以定义20个变量来表示20个同学。这个20个变量的值表示同学的身高。那么可以定义为:

int a,b,c,...;a = 173;b = 167;...

这样表示当然可以,而且实现简单。但是有了数组以后,我们就可以更加简便的来表示20个同学的身高信息。实现如下:

int a[20];a[0] = 173;a[1] = 167;...

这样实现起来是不是更加方便。

3、数组中几个关键符号(a a[0] &a &a[0])的理解

我们定义 int a[10];
(1) a :代表整个数组在内存中的首地址。a 做左值时,表示整个数组的所有空间(10 x 4 = 40字节),又因为C语言中的数组不能全部访问,所以,a不能作左值。a作右值时,表示数组首元素的首地址(首地址就是起始地址,就是4个字节中最开始的第一个字节的地址)。作右值时,a就等同于&a[0]。
(2) a[0] :a[0]表示数组首元素,作左值的时候可以进行赋值运算,如:a[0] = 20,表示首元素的值为20。a[0]也可以作右值,作右值就是把a[0]中存的值取出来。如:int b = a[0];那么b的值就是20。
(3) &a :就是数组名取地址。&a实质是一个常量,表示一个数组的地址 ,所以不能作左值。&a作右值时表示整个数组的首地址。
(4)&a[0] : &a[0]表示数组首元素的首地址。同样的&a[0]也不能作左值。作右值时:&a[0] 等同于a,意义也一样。

注意:a和&a作右值的区别:&a表示整个数组的首地址,a表示数组首元素的首地址,这两个在数值上是一样的,但是意义不一样。

接下来我们贴一段代码来验证以上所述:

#include <stdio.h>int main(void){    int a[10] = {0};    printf("a = %p;\n",a);    printf("a[0] = %d;\n",a[0]);    printf("&a[0] = %p;\n",&a[0]);    printf("&a = %p;\n",&a);    return 0;}

运行结果如下:

root@ubuntu:/mnt/hgfs/share/code/c_adcance/priner# gcc array.c root@ubuntu:/mnt/hgfs/share/code/c_adcance/priner# ./a.out a = 0xbfab6768;a[0] = 0;&a[0] = 0xbfab6768;&a = 0xbfab6768;

关于数组先小结到这,数组更多的是和指针一起使用,后续再介绍数组和指针一起使用的情况。

原创粉丝点击