数组里a和&a的区别

c语言二维数组a中,&a,&a[0],a[0][0]的值与值的类型 深入理解c语言中二维数组的二维数组 阅读详情

#include<stdio.h>
int main(void)
{
 int a[5]={1,2,3,4,5};
 int *ptr=(int *)(&a+1);   //&a代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。
 printf("%d %d\n",*(a+1),*(ptr-1));//a代表数组首元素的地址,+1应该加上sizeof(a[0]),所以a+1指

向a[1]处。
 return 0;     //输出是  2   5 
}


  对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T的指针的移动,以sizeof(T)移动单位。因此,对上题来说,a 是一个一维数组,数组中有5 个元素;ptr  是一个int  型的指针。
  &a+1:取数组a的首地址,该地址的值加上sizeof(a)的值,即&a+5*sizeof(int),也就是下一个数组的首地址,显然当前指针已经越过了数组的界限。 
  (int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr 。 
  *(a+1): a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,&a+1 是下一个数组的首地址。所以输出2。 
  *(ptr-1): 因为ptr  是指向a[5],并且ptr是int * 类型,所以*(ptr-1)  是指向a[4],输出5。

[C/C++]数组与指针——a,a[0],&a,&a[0]区别小结 1.a,a[0],&a,&a[0] 通过在VS上实验,以下是关于C语言中数组与指针的关系——a,a[0],&a,&a[0]之间的区别小小的总结 对于二维数组a[3][5] a         int(*)[5]类型      ——即指向的是a[0] a[0]     int *类型           ——即指向的是a[0][0] &a       int(*)[3][5]类型 阅读详情

相关推荐

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

C语言中“数组名”和“&数组名”

C语言中 数组名 和 &amp;amp;数组名 == 实验环境 == 1. 编译器:gcc 5.4.0 2. 操作系统:Ubuntu 16.04 x86_64 缘起 本以为此知识点我已熟练掌握,可是最近应用的时候还真给记混淆了。所以写篇文章加深印象。 Show me the code 废话少说,show me the code. #include &amp;lt;stdio.h&amp;gt; int ...

车子(chezi) 1万+

电脑的kernelbase.dll故障怎么处理?kernelbase.dll是什么文件

kernelbase.dll​是一个系统文件,属于Microsoft Windows操作系统的一部分。该DLL(动态链接库)文件包含了许多基本且低级的系统函数,这些函数被Windows上运行的各种程序和进程调用。kernelbase.dll通常与Kernel32.dll紧密相关,它是实现许多Windows API(应用程序编程接口)的封装。这些API涉及到内存管理、输入输出操作、进程和线程管理以及其他许多核心的操作系统功能。

电脑修复君的博客 4534

数组名 和&数组名的理解

对于数组名的理解

anayi的博客 1952

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6459

AVL_Cruise_interface\Simulink联合仿真

分享了AVL_Cruise通过interface模块与Simulink进行联合仿真的过程

qq_64735036的博客 2678

Scanf函数,取地址符&和字符数组的联系

Scanf函数,取地址符&和字符数组的联系

H1zerguo的博客 7229

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2026

C语言-数组名与&数组名的细节注意

通过整型数组、字符数组、字符串放在数组中、以及二维数组的数组名与&数组名和各类特殊情况的题目讲解来使得我们对于指针与数组名具有更加深刻的了解。

熬夜秃顶中...... 1478

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 595

数组里a和&a的区别(转自:http://www.cnblogs.com/auleaf/archive/2011/09/19/2181346.html)

//数组里a和&a的区别 #include void main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); //&a 代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。 printf("%d %d\n",*(a+1),*(ptr-1));//a 代表数组首元素的地址,+1应该

天涯明月的专栏 1707

小白也能轻松部署 OpenClaw:OpenClaw可视化部署工具+OpenClaw可视化管理工具分享

分享一个OpenClaw可视化一键部署工具,帮你快速打造属于自己的AI助手 🚀

XiaoqiangClub的博客 6711

C++学习之数组名a与&a的区别

在C++中定义一个数组: int a[5]={1,2,3,4,5}那么a到底代表什么含义呢?首先想到的是a代表的是数组的首元素地址。那么如果问你a的类型是什么呢?估计很多人就不太确定了,看下面程序,让编译器告诉我们a是什么类型的数据: main.cpp如下: 从图片中的错误提示可以看出: a的类型是int [5]类型。那么直接将a赋值给一个int (*)[5]类型的指针类型是不行的

softmanfly的专栏 3033

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

a与&a的区别

&a和a的区别 当我们定义一个数组a时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字a一旦与这块内存匹配就不能改变。a[0],a[1]等为a的元素,但并非元素的名字。数组的每一个元素都是没有名字的。 这里&a[0]和&a到底有什么区别呢?a[0]是一个元素,a是整个数组,虽然&a[0]与&a的值一样,但其意义不一样。

chf_1的博客 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

a与&a的区别与联系

如果。

weixin_42492218的博客 4773

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数组名a和&a的区别

  这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值,例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。     这里我们以整形数组为讲解:int  a[4];    a是一个地址,我们知道a其实本来的面目应该是:a+0,只不过这个0我们就省了,*(a+0)是什么呢,这个代表的就是取得第一个元素的内容,也就是

www 关注互联网最新技术 1万+

a+1和&a+1的区别

对于数组int a[5],(a+1)相当于&amp;a[1],这里因为a[1]是一个值,所以&amp;a[1]就是这个值的地址,我们之所以能用下标访问就是因为这个,比如:a[1]=*(&amp;a[1])= * (a+1);这对于多维数组也是适用。 而对于&amp;a+1,其中 &amp;a得到的是个指针,而且是个数组指针,即指向一个包含有5个整数数组的指针;那么对于&amp;a+1,也就是指针+1,指针+1的结果是地址,根据sizeof计算的结果可以知道,A.新地址=A.旧地址+sizeof(A)*st

Winters____的博客 3585

数组a[]中&a和a的区别

前提:a和&a的值是一样的,但是意义有所区别,a指的是a[0]的地址,&a指的是数组a的地址(“数组名”代表数组第一个元素的地址,“&数组名”代表的是整个数组的地址)。从而导致a+1和&a+1有了本质的差异。 a+1 = a[0]的地址+sizeof(int);(在第一个元素的地址上便宜一个数组元素的大小,即下一个元素,a[1]的地址。) &a+1 = 数组a的地址+sizeof(a);(在数组的地址上偏移一个数组的大小,此时sizeof(a)中的a是一个数组,不是一个指针,计算出来是一个数组的大小,不是指

我逍遥的博客 5123

c语言程序中a表示什么区别,C语言数组a和&a的区别讲解

C语言数组a和&amp;a的区别讲解面试经典题目#include "stdio.h"int main(){int a[5] = { 1,2,3,4,5 };int *ptr = (int *)(&amp;a + 1);printf("%d,%d", *(a + 1), *(ptr - 1));/*getchar是用VS编写方便查看输出*/getchar();return 0;}请思考一下上面的输出...

weixin_29408063的博客 3926
上一篇: 线程 return NULL 和 pthread_exit(NULL)
下一篇: 如何查找一个宏定义的位置
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值