嵌入式学习——指针(二)

一、指针引用数组

       1、基本概念

        ●  数组的指针是指数组的首地址。

        ●  数组元素的指针是指数组元素的地址。因此,同样可以用指针变量来指向数组或数组元素。

        ●  在C语言中,由于数组名代表数组的首地址,因此,数组名实际上也是指针。

        例如:可以用一个指针变量指向一个数组元素。

                int a[10];           (定义a为包含10个整型数据的数组)       

                int  *p;                 (定义p为指向整型变量的指针变量)            

                p=&a[0];              (把a[0]元素的地址赋给指针变量p)          

                也就是使p指向a数组下标为0的元素(第一个元素) 。

        2、指针的运算

        在指针指向数组元素时,可以对指针进行以下运算:

                加一个整数(用+或+=),如p+1                

                减一个整数(用-或-=),如p-1              

                自加运算,如p++,++p            

                自减运算,如p--,--p              

                两个指针相减,如p1-p2 (只有p1和p2都指向同一数组中的元素时才有意义)。

        分别说明如下:

                ⑴ 如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的 下一个元素,p-1指向同一数组中的上一个元素。即p+1或p-1也表示地址。但要注意的是,虽然指针变量p中存放的是地址,但p+1并不表示该地址加1,而表示在原地址的基础上加了该数据类型所占的字节数d

                ⑵ 如果p原来指向a[0],执行++p后p的值改变了,在p的原值基础上加d,这样p就指向数组的下一个元素a[1]。d是数组元素占的字节数。

                ⑶ 如果p的初值为&a[0]则p+i 和a+i 就是数组元素a[i]的地址,或者说,它们指向a数组的第 i 个元素 。

                ⑷ *(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。

                ⑸ 如果指针变量p1和p2都指向同一数组,如执行p2-p1,结果是两个地址之差除以数组元素的长度d。

        3、指针引用数组元素

                ⑴  下标法,如a[i] 形式;

                ⑵  指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值p=a。

                使用指针变量指向数组元素时,注意以下几个问题:  

                ⑴ 可以通过改变指针变量p的值来指向不同的元素。p++使p指向不同的元素,而a++是无法实现的,因为a是数组的首地址,是常量。  

                ⑵  要注意指针变量的当前值。  

                ⑶  使用指针变量指向数组元素时,应切实保证指向有效的元素,注意不要越界(超过最大元素),越界系统不提示。  

                ⑷  指向数组的指针变量也可以带下标,如p[i]。若p=&a[0],则p[i]、*(p+i) 代表a[i]。  

                ⑸  ① p++;*p;    先使p指向下一元素,然后再取其值;        

                      ② *p++ 相当于 *(p++),即先求*p,再作p++        

                      ③ *(++p)  先使p++ ,再取*p        

                      ④ (*p)++  使所指向的元素值加1,而不是指针值加1        

                      ⑤ 若p指向a数组中第i个元素,则:*(p--) 相当于a[i--],先*p,再p--

                                                                              *(++p)相当于a[++i],先p++,再*

                                                                              *(--p)相当于a[--i],先p--,再*

        4、数组名作函数参数

                如果有一个实参数组,想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4种情况:

                (1)形参和实参都用数组名

                (2)实参用数组名,形参用指针变量

                (3)实参形参都用指针变量

                (4)实参为指针变量,形参为数组名

        5、指针引用多维数组

                指针变量可以指向一维数组元素,也可以指向多维数组元素。

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值