C语言指针和数组

如果说C语言中最重要的是指针,那么数组也能掺一脚进来说话。要灵活地使用指针和数组,就必须搞懂它们之间的区别:相同之处和不同之处,以及操作的对象是什么。本文从这3个角度出发,讨论C语言中的指针和数组。
在讨论指针和数组相同与不同之前,我们先弄明白指针和数组操作的对象是什么。指针操作的对象是地址,数组操作的对象是基础数据(包括指针)。一开始最容易让人摸不着头脑的一个概念就是二维数组A(row * col个单元),也会被人认为是二维指针。但我们必须告诉自己如果你是想存储值,那A就是二维数组,A能存储row * col个数据;如果是想存储指针,那A就是一维指针数组,A能存储row个指针。
它们之间的相同之处:第一,就是指针和数组都可通过指针形式表示:
在这里插入图片描述

如上图,arr 即可以表示为数组一系列int单元的首地址,也可以表示为一个int单元的地址, 而且它就只能存储地址,因为一个指针只能存储地址,当然,在初始化指针时也会有赋值的情况:
在这里插入图片描述

在第13行的时候,报了一个“从‘int’初始化‘int*’使指针从整数变为没有类型转换的指针”
就是因为没有给arr分配内存,所以报了错。凡是都有例外,仔细一看第14行的char类型的指针变量竟然没有报错,虽说编译器也有类似于‘报错停止编译’的功能,但事实是C允许这种初始化应用在字符指针上,但也只能这么做。如果先将str声明了,再向str赋值也是会报错的,因为此时str是个空指针。
它们之间的不同之处,数组申请的是内存是栈区的;指针动态申请的内存是堆区的,其他的并没有什么其他区别。
以上就是我对指针和数组的理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值