c语言中指针4要素,第二十三章、C语言之指针4

【【C语言学习探讨】第二十三章、C语言之指针4】https://toutiao.com/group/6673445675096605188/?app=explore_article&timestamp=1554127717&group_id=6673445675096605188&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share

这一章我们来看看指针和多维数组有什么关系,我们先用一个二维数组来了解一下。

假设有一个二维整形数组int a[4][2];

这个二维数组,看过前几章的应该可以知道数组名a同时也是数组首元素的地址,像这个二维数组a的首元素本身又是包含两个int的数组,因此a也是包含两个int的数组地址,

0560a2cb706711eed0f6ca11876f4e8e.png

我们通过一段程序来看一下:

95422cb189ca221d258987062d293ea7.png

我们来分析一下:

1. 因为a是数组首元素的地址,所有a的值和&a[0]的值相同,另一方面,a[0]本身是包含了两个整数的数组看第一张图,因此呢a[0]的值同其首元素的地址&a[0][0]相同,简单的说就是,a[0]是一个整数大小对象的地址,而a是两个整数大小对象的地址,但是他们开始于同一个地址,所以a和a[0]具有相同的值。

2. 对一个指针加一,会对原来的数值加上一个对应类型大小的数值。在这方面a和a[0]是不一样的,a所指向的大小是两个int,而a[0]所指向对象的大小是一个int,因此a 1和a[0] 1结果不同。

3. 对一个指针取值(使用*运算符或者带有索引的[]运算符),得到的是该指针所指向对象的数值。因为a[0]是其首元素a[0][0]的地址,所以*(a[0])代表存储在a[0][0]中的数值,即一个int数值,同样的*a代表其首元素a[0]的值,但是a[0]本身就是一个int数的地址,即&a[0][0],因此*a是&a[0][0]。简而言之,a是地址的地址,需要两次取值。

总结一下:

8c67097249e94a2c0e56a57cd8f759ef.png

上面可能看的云里雾里,那我在用一幅图解释下:

7bc61398a71ba64c8c9f10a868e3dc89.png

不知道大家了解了没有,来个题目吧,好久没有做题目了,大家可以评论区回答下,加深一下印象:

下面这段代码对打印出什么?

cd0e77441f41c5a2d59b465babc9cbc2.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值