从零开始的嵌入式生活:数组与指针详解

一、一维数组与一级指针关系

一维数组与指针(难点)

char ch[6] = "hello";

数组每一个元素地址:&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],

ch :数组首元素地址

&ch :整个数组的首地址

数组中每个元素地址的表示方法:

ch == &a[0]   ch+1==&a[1]   ch+2==&a[2]   ch+3==&a[3]     ch+4==&a[4]    ch+5==&a[5]

同理:

*ch == a[0]    *(ch+1) ==a[1]     *(ch+2) == a[2]   *(ch+3) == a[3]    *(ch+4) == a[4]   *(ch+5) == a[4]

例子:

char ch[6]={"hello"};
假设:ch的地址为:0x234;
那么 ch = 0x234
*(ch+3)='l’
ch[2]='l'
& (ch[1])  =0x235
* ( &ch[5])='\0'	
&ch+1=0x23A= 0x234+6

总结:

(1)在实际开发过程中,数组名可以直接代替指针的方式,通过数组名操作数组

(2)数组名+n,实际的地址值为:数组名+n*sizeof(指向数据指针类型)

(3)数组名+1与&数组名+1是不同的结果。

(4)在数组中可以有指针运算,如ch+2, ch-5;如果数组名做为参数传递给函数,在函数内可通过指针++,或者指针-- 移动,可以指向不同的元素

(5)两个指针相减(数组中,指针相减才有意义),结果为两个指针之间的元素个数

二、二维数组与的指针关系

char ch[3][5] = {"test","hi","good"};

ch :大数组首地址

&ch :整块数组的首地址

假设:ch = 0x22;

ch+1       &ch+1          &ch[0][0]                 *(ch+1) == *((ch+1)+0)

0x27        0x31            0x22                         'h'

 

ch+i:存储的某块大数组地址

*(ch+i):取某块大数组基地址

(*(ch+i)+j):某块大数组小数组元素的地址

*((*(ch+i)+j)):某块大数组小数组中的元素的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值