数组名和数组名取地址的区别

TypeScript的安装与使用 阅读详情
#include <stdio.h>
int main()
{
int a[5];
printf("%d\n", a);
printf("%d\n", &a);
printf("%d\n", a + 1);
printf("%d\n", &a + 1);
printf("%d\n", &a[0] + 1);
printf("---------------\n");
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(&a));

return 0;
}

运行结果:
数组名和数组名取地址的区别

分析:
      由运行结果可知,数组名a和&a得内存地址相同。我们由数组和指针的关系知道,a代表这个数字,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的。所以有a+1为1245040,即数组中a[1]的地址是1245040(在首地址1245036基础上加int的字节数4得到的)。
      然而,&a代表的不是取a这个变量的地址,而是取数组元素的地址。虽然&a和a得内存地址相同,但它们的意义不相同,它是代表整个数组的,它的进阶单位是整个数组的字节长度(这里是4*5=20),所以&a+1得内存地址为1245056。

     其实,a的类型是int[5]    数组
              &a的类型是int(*)[5]   指针——指向int[5]数组的指针
              &a[0]的类型是int*      指针——指向int类型的指针
另外,当用sizeof时,由于它是个关键词,而不是个函数,所以数组不自动转换为指针,得到的结果是数组的长度*数组中元素类型所占的字节数,本例中sizeof(a)和sizeof(&a)都是20.

ps:如果是(int)a +1,则结果是1245037(即1245036+1)

2023华为od机试C卷【推荐多样性】Java&Go 实现 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略1.各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一元素,再从第二个列表中为每屏选择一个元素,依次类推2.每个列表的元素尽量均分为N份,如果不够N个,也要全部分配完, 阅读详情

相关推荐

UE5动画革命:如何用Motion Matching技术让你的游戏角色动作更流畅(附实战配置)

本文深入解析了UE5中Motion Matching技术的实战配置与应用。通过对比传统动画状态机的局限,详细阐述了如何构建动画数据库、在UE5中配置Pose Search Database及动画蓝图,并探讨了与IK融合、性能优化等进阶策略。该技术能显著提升游戏角色动作的流畅度与真实感,是下一代动画解决方案的核心。

weixin_29075633的博客 862

[C++] 指向常量的指针 VS 指针类型的常量

const 修饰指针时的位置不同,作用也不相同。

lizhiyuanbest的博客 231

【开源数据集】电动车佩戴头盔检测数据集(TWHD)

佩戴头盔检测数据集VOC格式图像与标注数量各5448张

hzg19930513的博客 5168

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

好啦,今天的话题就讲到这里喽!大家是否有收获呢?我相信,认真看过这篇文章的你们一定是收获满满!上天一定会眷顾那些努力提升自己的人,所以大家每天都要坚持敲代码丫,我就在每天坚持敲代码呦!看谁卷得过谁,哈哈哈\(0^◇^0)/

c565114的博客 1738

西门子828D/840DSL数控机床产量数据采集实战:手把手教你绕过授权限制(附Demo源码)

本文详细介绍了西门子828D/840DSL数控机床产量数据采集的实战技术,包括绕过授权限制的替代方案和实现方法。通过分析通信协议、配置参数和数据处理,提供了一套高效且合规的数据采集解决方案,并附有Demo源码,帮助技术人员快速上手。

weixin_28278377的博客 762

数组名和数组名取地址&

在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。        在以下两种场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组

caoyuanll的专栏 982

Vite 任意文件读取漏洞复现(CVE-2026-39363)

Vite开发服务器 WebSocket中的fetchModule方法未实施server.fs访问控制,导致攻击者可通过WebSocket连接并读取服务器上的任意文件(CVE-2026-39363)

iSee857的博客 221

C语言中一维数组名与首个元素地址以及对一维数组名取地址的区别

数组名与数组首个元素的地址在表示上相同,通过递加操作可以获取下一个元素的地址。然而,对数组名取地址表示的是整个数组的地址,递加操作会得到下一个数组的地址(尽管可能不存在)。在代码示例中,arr和&arr[0]的地址相同,递加后指向下一个元素;而&arr表示整个数组的地址,递加后指向下一个数组的起始位置。这三种表示方式虽然初始地址相同,但递加后的含义不同,分别以单个元素或整个数组为单位进行地址计算。

m0_52467477的博客 568

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

从 0 到 1 玩转小智 AI 智能音箱:开发教程 + 实战项目全攻略

如果说 MCP 是工具箱,那 SDK 就是 “技能模板”—— 小智音箱的自定义技能本质是 “意图识别 + 逻辑响应” 的组合,就像给嵌入式设备写驱动程序,只要按规则调用接口,就能实现各种功能。小智 AI 音箱的开发门槛并不高,核心是利用 MCP SDK 封装好的接口,结合嵌入式开发的 “硬件对接 + 逻辑编程” 思维,就能实现各种自定义功能。从环境搭建到技能开发,再到实战项目落地,每一步都是对 “软件控制硬件” 的实践 —— 而这正是嵌入式开发的核心魅力。

weixin_42300449的博客 1193

C语言中,数组名作为类型,作为地址,对数组名取地址的区别

当你对数组名取地址时,你得到的是整个数组的地址。这个地址与数组首元素的地址在数值上可能相同,但它们的类型是不同的。对数组名取地址的类型是。这意味着,当你尝试访问数组名时,你实际上是在访问首元素的地址。这种特性使得我们可以使用数组名进行指针运算,如。数组名作为地址时,指的是数组名为指向数组首地址元素的指针。是一个指向包含10个整数的数组的指针,它指向整个数组。数组名作为类型时,用于声明一个数组。对数组名取地址,得到的是整个数组的地址。是一个包含10个整数的数组的类型。,其中N是数组的元素数量。

qq_51776293的博客 1210

利用插件扩展 Qt 应用程序

不仅 Qt 本身可以通过插件进行扩展,而且 Qt 应用程序也可以通过插件来扩展,这需要应用程序使用 `QPluginLoader` 检测和加载插件。

青春不老,奋斗不止! 1万+

数组a[]的数组名a和对数组名取地址&a的区别

二者区别 如:对于数组int a[10]; a: 数组名a是指数组首元素的地址(以数组中的一个元素大小为单位) &a: 数组名取地址&a是指整个数组的首地址(以整个数组大小为单位) #include <iostream> using namespace std; int main() { int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; ...

weixin_41926709的博客 988

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

指针 数组 数组名和数组名取地址的区别

首先指针数组 和数组指针叫法本身是种误导 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 其次他们本质一个是数组,一个是指针 int* a[4]     表示是一个数组                      数组a中的元素都为int型指

浪子的专栏 2946

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数组名和指针的区别和联系、数组名取地址&a

数组a和指针p的构成是很相似的。它们实际存的都是一个地址。但它俩自身又有不同,指针本身是一个对象,在内存中是为其分配了空间的;但数组名在内存空间中没有分配到空间(这将导致`&a`操作的效果可能和预想的不大一样)

anlian523的博客 3673

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数组名和数组名取地址& 的区别

在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。        在以下两种场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一

wangkeyen的专栏 4396

【2015-02-16】【转】数组名和数组名取地址的区别

转载的C语言深入讲解,分析数组名a与&a在类型和值上的区别:a是首元素指针(int *),&a是整个数组的指针(int (*)[n]),两者值相同但类型不同,通过反汇编输出直观验证区别。

cstriker1407的专栏 90
上一篇: 程序进度条的实现
下一篇: C/C++ linux下光标定位和清屏函数(printf 实现)
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值