2024龙年特别篇 -- 魔法指针 之 数组名的理解

2024-02-25 19:28

本文主要是介绍2024龙年特别篇 -- 魔法指针 之 数组名的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你是否为不理解关于指针数组名而焦虑,听说该博主白子寰讲得很详细喔 

目录

指针的数组名 VS &数组名

①段代码

 ②段代码

小结

指针访问数组


指针的数组名 VS &数组名

我们先来看下段简单的代码

①段代码

int main()
{int arr[10] = { 0 };printf("%p\n", &arr);printf("%p\n", &arr[0]);printf("%p\n", arr);return 0;
}

结果会输出什么呢?

关于打印地址的 &数组名,&数组首元素 和 数组名 有什么区别?

控制台输出显示:

我们发现,三者打印出来的地址完全一样;

那么,我们可不可以认为:数组名是数组首元素的地址?

来,我们继续来看下段长的代码:

 ②段代码

注:%p是用来打印地址的

int main()
{int arr[10] = { 0 };printf("sizeof(arr) = %d\n", sizeof(arr));printf("\n");printf("&arr[0]   = %p\n", &arr[0]);printf("&arr[0]+1 = %p\n", &arr[0]+1);printf("\n");printf("arr       = %p\n", arr);printf("arr+1     = %p\n", arr+1);printf("\n");printf("&arr      = %p\n", &arr);printf("&arr+1    = %p\n", &arr+1);return 0;
}

来思考一下,这段代码的结果会输出什么? 

分段代码解释:

下面👇是X86环境下控制台输出 :

我们可以看出 &arr[0] 和&arr[0]+1 , arr 和 arr+1 都相差4个字节(byte)

因为&arr 和 arr 都是首元素的地址,+1就是跳过一个元素,也就是4个字节(byte)

但 &arr 和 &arr+1 相差40个字节(byte)

因为&arr是数组的地址,+1操作是跳过整个数组的

 

小结

从上面也可以得出,关于 数组名 和 &数组名 的理解有两个例外 :


指针访问数组

在学  指针变量的意义我们有涉及到 

这里就不过多的赘述,如果还不理解,点击👆上面蓝色字体;

但不同的是在控制台输入和输出,输入和输出我分别列出了三种方式

看下段代码:

int main()
{int a[10] = { 0 };int sz = sizeof(a) / sizeof(a[0]);int* p = a;int i = 0;//输入for (i = 0; i < sz; i++){/*方式一*///scanf("%d", &a[i]);/*方式二*///scanf("%d", (p+i));/*方式三*/scanf("%d", (a + i));}//输出for (i = 0; i < sz; i++){/*方式一*///printf("%d ", a[i]);/*方式二*///printf("%d ", *(a + i));/*方式三*/printf("%d ", *(p + i));}printf("\n");return 0;
}

控制台显示: 

 


 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:

“此程不负遇见,与君顶峰相见”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走把。

这篇关于2024龙年特别篇 -- 魔法指针 之 数组名的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746458

相关文章

创新、引领、发展——SAMPE中国2024年会在京盛大开幕

绿树阴浓夏日长,在这个色彩缤纷的季节,SAMPE中国2024年会暨第十九届国际先进复合材料制品原材料、工装及工程应用展览会在中国国际展览中心(北京朝阳馆)隆重开幕。新老朋友共聚一堂,把酒话桑麻。 为期4天的国际学术会议以“先进复合材料,引领产业创新与可持续化发展”为主题,设立了34个主题分会场,其中包括了可持续化会场、国际大学生会场、中法复合材料制造技术峰会三个国际会场和女科技工作者委员会沙龙,

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

利用结构体作为函数参数时结构体指针的定义

在利用结构体作为函数的参数进行传递时,容易犯的一个错误是将一个野指针传给函数导致错误。 #include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10typedef struct {int r[MAXSIZE]; //用于存储要排序的数组,r[0]作为哨兵或者临时变量int length;

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

2024年6月24日-6月30日(ue独立游戏为核心)

试过重点放在独立游戏上,有个indienova独立游戏团队是全职的,由于他们干了几个月,节奏暂时跟不上,紧张焦虑了。五一时也有点自暴自弃了,实在没必要,按照自己的节奏走即可。精力和时间也有限,放在周末进行即可。除非哪天失业了,再也找不到工作了,再把重心放在独立游戏上。 另外,找到一个同样业余的美术,从头做肉鸽游戏,两周一次正式交流即可。节奏一定要放慢,不能影响正常工作生活。如果影响到了,还不如自

潜艇伟伟迷杂交版植物大战僵尸2024最新免费安卓+ios苹果+iPad分享

嗨,亲爱的游戏迷们!今天我要给你们种草一个超有趣的游戏——植物大战僵尸杂交版。这款游戏不仅继承了原有经典游戏的核心玩法,还加入了许多创新元素,让玩家能够体验到前所未有的乐趣。快来跟随我一起探索这个神奇的世界吧! 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d60ed6e4791c 🔥 创新与经典的完美结合 植物大战僵尸杂交版在保持了原游戏经典玩