数组与指针

当初学c语言的时候,数组是为学指针做铺垫。的确,有了数组的铺垫,指针的学习变容易了,但是指针与数组之间的关系开始暧昧了,扑朔迷离,若隐若现。在写代码的时候,数组和指针的混用导致出现各种语法错误,依靠强大的编译器,仍然能将错误解决。为了赶进度,导致心中的困惑未解。今天,MD,好好分析分析。

1、先从指针说起

         int *p;

         指针的定义很好理解,p是一个指针变量,它将指向一个整型地址。地址是指内存的单元编号。

2、一维数组

int a[10];

一个简单的数组定义。其中,a代表一个整形数组类型,一共有10个单元。a还代表这段连续内存的起始地址,但不能与指针变量等同。因为是:严格地讲,数组其实地址用&a[0]表示,但是直接用a表示更方便,有的书籍说a是一个符号常量,并且只能作为右值,而指针可以作为左值。也正是这块的概念模糊,导致错误频频。

a可以代表其实地址,此时代表整型数组的起始地址,因此 int *p = a; 等式两边类型匹配。

        &a代表什么呢? &a肯定代表一个地址,并且其值等于a的起始地址。前面说有的书说a只能是右值,而&符号不能用于右值。

        区别是类型不同。类型不同是严重的不同。。。。

 a的地址类型可以理解成int *;

                 &a的地址类型可以理解成 int (*)[10],此时a符号不作内存起始地址,作为数组类型的含义;(数组指针,表示指向一个整型的10个单位的数组)

       举个例子, 

        

3、多维数组

多维数组实际上就是数组嵌套数组

先看二维数组,int a[2][10];

        a代表整个数组的起始地址,类型为 int (*)[10]. 因此,可以用a来获取数组中某个单元的地址,或者数组中某个单元所存储的值。但是是作为地址,传值给一个指针变量时,需要注意类型的匹配。

       同理 a[1]的类型可以理解为 int *。

       &a 的类型为 int (*)[2][10]

       &a[1]的类型为int (*)[10]

       至于多维,可以根据二维类推。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值