【C语言】指针专题(数组名,取地址数组名)——带你深入理解指针 绝对干货,没一点儿水分!

目录

1.sizeof(数组名),sizeof(取地址数组名)

1.2 &数组名与数组名的异同:

2.题目讲解

2.1整型数组

2.2字符数组

3.结语


Hello everbody!在这一篇文章中,我打算和大家聊一聊c语言的指针。指针可以说是c语言的灵魂,指针的重要性想必无需我多言。而指针的种类繁多,特别是数组指针,指针数组,函数指针,函数指针数组,指向函数指针数组的指针,数组名,取地址数组名等等都属于指针的范畴。它们的类型,声明都相对复杂。这是c语言中最隐晦,最难啃的骨头。对于c初学者来说难度较大。当然,只通过一篇文章想把这些东西全部给大家讲清楚显然不太可能。所以今天我先和大家聊一聊数组名和取地址数组名。在接下来的几篇文章中,我会陆续把c语言所有的指针全部给大家讲清楚。届时,欢迎各位捧场!

                                ​​​​​​​        

1.sizeof(数组名),sizeof(取地址数组名)

这是一组结构十分相似的题目,也是曾经公司招聘的面试题目。大家可以自己先做一做,看看能做对几道。可以把自己的答案写在评论区下。如果能做全对的话,说明你对指针的理解已经十分深入了呦!

首先我们要明确的一点是:一个数组的数组名就是该数组首元素的地址!

但是有两个例外:1.sizeof(数组名).这里的数组名表示的是整个数组。sizeof(数组名)计算的是整个数组的大小,单位是字节。

2.&数组名,这里的数组名表示整个数组,&数组名取出的是数组的地址。

1.2 &数组名与数组名的异同:

1.相同点:它们的值相同,大小都等于该数组首元素的地址。

2.不同点:类型不同,访问权限不同。如果这是一个有十个元素的整型数组,那么数组名就是整型指针,只能访问4个字节。&数组名就是数组指针,能够访问整个数组大小的字节,对于有十个元素的整型数组,就能都访问40个字节。再讲清楚一点就是:数组名+1,指针就从第一个元素跳到了下一个元素。&数组名+1,指针就从数组的起始位置跳过了一整个数组。

为了让大家更直观的理解它们,我编写了一个能够以16进制打印地址的程序。

在该程序中,我们可以清晰的看到:arr与&arr大小相同,大小均为0x62FDF0。arr+1大小为0x62FDF4,跳过了4个字节。&arr+1大小为0x62FE18,跳过了40个字节。

2.题目讲解

2.1整型数组

我把&数组名和数组名单独列一个标题也说明了它们的重要性。搞清楚了上面所讲的东西,理解下题就会相对容易一些。

1.sizeof(数组名),计算数组的大小,单位字节。答案是16

2.这里数组名没有单独放在sizeof中,所以这里的数组名代表首元素地址,而地址的大小在32位平台下是4个字节,在64位平台下是8个字节,所以本题的答案是4/8

3.数组名表示首元素地址,*数组名表示首元素。这里计算的是首元素的大小,而整型元素不论在32位平台下还是在64位平台下大小都是4个字节。所以答案是4

4.数组名+1,指针从首元素跳转到第二个元素。但计算的依然是地址的大小。答案是4/8

5.a[1]访问的是数组第二个元素,这里计算的是第二个元素的大小。答案是4

6.&数组名取出的是数组的地址。虽然是数组的地址,但不管怎么说,它都是地址,地址的大小都是4或8个字节。数组的地址唯一与众不同的地方只是它的访问权限大一些,仅此而已,大家可千万不要搞混了呀!答案是4/8

7.取地址数组名取出的是整个数组的地址,再解引用得到整个数组。也可以这样理解:取地址和解引用抵消了,相当于sizeof(数组名) 答案是16

8.&数组名+1,指针跳过整个数组,但这个表达式依然是地址,sizeof计算的依然是地址的大小。答案是4/8

9.数组下标运算符【】的优先级高于取地址操作符&。所以这里是先访问首元素再取地址。解释方式同上。答案是4/8

10.&a[0]表示首元素地址,&a[0]+1表示第二个元素的地址。答案是4/8

2.2字符数组

1.sizeof(数组名) 计算数组的大小 单位字节 答案是6

2.数组名没有单独放在sizeof中,数组名代表首元素地址,只要是地址,大小就是4或8个字节。大家不要把字符指针看扁了呀! 答案是4/8

3.*arr代表首元素,计算首元素的大小 答案是1

4.解释同上 答案是1

5.&数组名,取出了整个数组的地址,该指针的访问权限有6个字节,但仍然是地址。 答案是4/8

6.&arr+1,跳过了整个数组,但仍然是地址 答案是4/8

7.&arr[0]+1,跳过了首元素,但仍然是地址 答案是4/8

3.结语

好啦,今天的话题就讲到这里喽!大家是否有收获呢?我相信,认真看过这篇文章的你们一定是收获满满!

上天一定会眷顾那些努力提升自己的人,所以大家每天都要坚持敲代码丫,我就在每天坚持敲代码呦!看谁卷得过谁,哈哈哈\(0^◇^0)/

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崽崽..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值