指针和数组

通过数组下标所能完成的任何操作都可以通过指针来实现。一般来说,用指针编写的程序比用数组下标编写的程序执行速度快。
为了叙述方便,现声明整型数组和指针:
int a[10], *pa;
相同点:
1、数组名和指针都表示地址
2、都可以通过a[i]和pa[i]或者*(a+i)和*(pa+i)访问第i个元素
不同点:
1、指针是变量,数组名是常量指针。(所以pa = a 和 pa++操作都是合法的,而a = pa 和 a++ 操作是不合法的  编译报错:lvalue required as increment operand)
2、声明数组时,会分配一些内存空间,用于容纳数组元素;声明指针时,只分配了用于容纳指针本身的内存空间。(sizeof(a) = 4*10; sizeof(pa) = 4)
数组和指针的联系:
C语言标准对此做了如下说明:
规则1:表达式中的数组名被编译器当做指向该数组的第一个元素的指针
规则2:下标总是与指针和偏移量相同

规则3:在函数参数的声明中(形式参数),数组名被编译器当做指向该数组第一个元素的指针


补充:c语言不进行下标检查,c在处理下标操作符时把a[i]看做*(a + i),所以 a [ i ] 和 i [ a ]都是合法的。编译器把 i [ a ]看做 *(i + a)。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值