C专家编程--指针与数组(二) 数组 指针 联系

本文深入探讨C语言中数组和指针的联系,解析何时数组可被视为指针。在函数参数声明时,数组会被转换为指向首元素的指针。数组名在表达式中等同于指针,可用于下标操作。通过举例说明数组和指针的遍历,阐述其在内存访问上的异同。C语言将数组形参当作指针处理,是为了提高效率,避免复制整个数组。
摘要由CSDN通过智能技术生成

这篇博文则从更深层的角度剖析数组和指针的联系

什么时候数组和指针相同(When an Array Is a Pointer )

    在实际应用中,他们可以互换的情形要大大多于不能互换的情形。首先再回顾一下声明和定义,(上一篇中有提到这里在深入一下)

声明本身还可以进一步分为三种情况:

1)外部数组的声明(external array)

2)数组的定义(它是声明的一种特殊情况,它分配内存空间,并可能提供一个初值)

3)函数参数的声明

所有作为函数参数的声明在编译时总是会转换为指针(指向数组第一个元素),而其他情况的声明,数组就是数组 ,指针就是指针

可以用如下的图来说明他们的关系:

 

稍微总结一下:

    对于编译过程中数组会转化为指针的情况,数组和指针可以互换,比如:声明为函数参数的时候 fun(int a [])和fun(int *a )是等同的。因为编译的过程中fun(int a [])中的数组会转化为指针形式,也就和fun(int *a )的效果一样了。

    如果编译到时候数组不被当做指针处理,那么声明的时候不能等同。对于这种情况,数组和指针是不一样的的,在运行时的表示形式也不一样,并可能产生不同的代码。

对编译器而言,一个数组就是一个地址,一个指针就是地址的地址。

c语言标准对此做了如下说明:

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值