C语言小结--数组

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;

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值