数组与指针

问题一:数组与指针的区别

概念不同: 数组是存储多个相同类型数据的集合;而指针相当于一个变量,存放的是数据在内存中的地址。
赋值不同: 数组的赋值只能一个个元素的赋值或者拷贝;同类型指针变量可以相互赋值
访问数据方式不同: 数组可以直接访问,指针需要先解引用,然后访问指向地址的内容
sizeof不同: 数组的size与元素类型还有个数有关,而指针变量的大小与32 64位操作系统有关。
指针与数组名异同: 指针与数组名都可以表示地址,但是指针是变量可以修改,数组名是常量不可以修改赋值。
当数组传参的时候,数组会退化为指针。 这是因为c语言只能以值拷贝的方式传递参数,如果拷贝整个数组,效率太低,因此c语言将数组的传参进行退化,将数组名看做是常量指针,指向数组首元素

问题二:指针数组与数组指针

指针数组本质上是数组,数组指针本质上是指针,优先级高的决定本质。

指针数组:实际是数组,数组内的每个元素存在指针类型的元素 int * arr[8];

**优先级 [] > **

数组指针:实际上是一个指针,指向一个数组 int(*a)[8];

优先级 (*) > [],说明a是指针把变量,指向一个存储8个整形元素的数组。

问题三:引用与指针的区别

  1. **引用是给已定义的变量其别名,声明的时候必须初始化。**可以看做是一个指针常量,只能绑定到初始化它的对象。(指向常量的指针指不能通过指针改变指针所指对象)。指针是一个存储地址的变量,在运行时可以改变所指内容。
  2. **引用创建的时候必须初始化,且不为空,指针创建时可以为空。**不存在指向空值的引用,意味着引用的代码效率比使用指针要高,因为引用需要测试其合法性
  3. sizeof意义不同
  4. 没有引用常量,有指针常量。 没有int & const p, 有 int * const p。存在常量指针与常量引用: const int * p, const int &p.
  5. 多级指针 一级引用 指针可以多级(**p)
  6. 参数传递 作为参数传递时,对引用的修改直接作用于引用指向的对象,但是指针必须先解引用,然后才能修改指向的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值