数组名(a)和对数组名取地址(&a)的区别

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点 本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。 阅读详情

最近在看《高级C语言程序员测试必过的十六道最佳题》时,发现一道非常有趣的题目。题目如下:

Consider the following program:

#include <stdio.h>

int main()
{
	int a[5] = {1,2,3,4,5};

	int *ptr = (int*)(&a+1);
	printf("%d %d\n", *(a+1), *(ptr-1));
	
	return 0;
}

The output for this program is

(a) 2   2

(b) 2   1

(c) 2   5

(d) None of the above

经过测试,其输出结果如下:

从运行结果可知,我们应该选择C。那么,为什么选C呢?

       首先,我们可以看下它的题目,数组a是一个数组,每个数组元素的类型是int,且总共有5个元素。也就是说数组名a的类型是整型数组类型。那么,&a的类型是什么呢?我们只有知道了&a的类型才能知道其加1具体是什么意思?在这里,&a的类型是指向整型数组的指针类型。那么&a+1表示的意思就是:将指针移动的大小是5*4=20(在32系统上)。即这里加1实际上是加上了数组a的整个数组长度。因为&a的类型是指向整个数组a的指针类型。那么,它指向的类型的长度是含有5个整型元素的数组,所以这里加1,实际上是加上数组a的长度。那么,后面的printf函数的里面的输出就可以很好的得出了。要注意下就是,&a+1是从数组的第一个元素处开始移动的,移动后,它指向了数组a最后一个元素的下一个位置处,所以,后面才有了(ptr-1)。

我们也可以编程去验证它,例如,下面的程序:

#include <stdio.h>

int main()
{
	int a[5] = {1,2,3,4,5};

	int *ptr = (int*)(&a+1);
	printf("&a = %d\n", &a);
	printf("(&a+1) = %d\n", (&a+1));
	printf("%d %d \n", *(a+1), *(ptr-1));
	
	return 0;
}

我们可以看下它的输出结果:

       从输出的结果中,我们可以看到,&a的地址是1244980,而&a+1的地址是1245000。二者相差20,从而验证上面所说的额,&a的类型是一个指向整型数组的指针类型。



 

 

YOLOv11 改进 - 注意力机制 | LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测 本文介绍了一种用于滑坡检测的模型LS-YOLO及其在YOLOv11中的结合应用。LS-YOLO首先构建多尺度滑坡数据集MSLD,为模型训练提供丰富数据。设计了基于高效通道注意力、平均池化和空间可分离卷积的多尺度特征提取模块MSFE,充分提取滑坡特征信息。在解耦头中采用膨胀卷积增加模型感受野。我们将MSFE模块集成进YOLOv11,替换部分原有模块。实验表明,改进后的YOLOv11在数据集中表现出色 。 阅读详情

相关推荐

LinuxCNC 源码解析:从界面开发到硬件交互的实战指南

本文深入解析LinuxCNC源码架构,从用户界面开发到硬件交互的实战指南。涵盖GTK与Tkinter界面开发、HAL硬件抽象层、G代码解析器改造及运动控制核心等关键模块,提供定制化开发技巧与性能优化方案,助力开发者高效掌握数控系统开发。

weixin_27066963的博客 190

嵌入式C语言——常见面试题

声明变量不需要建立存储空间,变量的定义需要建立一个存储空间。函数定义:对函数功能确定、指定函数名称,函数类型,形参及其类型,函数体等等,都是一个完整的,独立的函数单位。函数声明:函数名字、函数类型和形参个数、类型和顺序告知编译器,便于在包含函数调用的语句进行编译时,据此对其进行对照验证检查。...

qq_42544728的博客 5556

实测避坑:用SGM61720做BUCK电路,SW引脚电压尖峰怎么压下去?

本文针对SGM61720在BUCK电路中SW引脚电压尖峰问题,提供实测避坑指南。通过分析电压尖峰、过冲等核心问题,详细讲解自举电阻调整、RC缓冲电路计算和PCB走线优化三大解决方案,帮助工程师有效降低SW引脚电压尖峰,提升系统稳定性和EMI性能。

weixin_42634811的博客 213

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

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

qq_51776293的博客 1210

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3909

SAP ABAP实战:用BAPI_PO_CREATE1创建采购订单时,如何巧妙处理PBXX和PB00条件类型?

本文深入探讨了在SAP ABAP开发中使用BAPI_PO_CREATE1创建采购订单时,如何有效处理PBXX和PB00条件类型的难题。通过分析外协加工订单的特殊需求,提供了从问题定位到解决方案的全流程方法,包括数据流向追踪、字段控制策略和增强实现方案,帮助开发者解决条件类型自动生成的业务痛点。

weixin_30614109的博客 824

数组名a和&a的区别

1、a表示&a[0],也即对数组首元素取地址,a+1表示首地址+sizeof(元素类型)。 2、&a虽然值为数组首元素地址,但类型为:类型 (*)[数组元素个数],所以&a+1大小为:首地址+sizeof(a)。    &a取得是整个数组的地址!既数组名取地址等价于对数组取地址。 在学习c语言的过程中我们可以发现一个一维数组的的数组名往往具有两层含义:   *作为数组名代表

linuxwln的博客 1567

2025.06.16【转录组】|Ribo-seq数据流程详解(二 基因组比对)

本文详细介绍了Ribo-seq数据分析中的比对流程,包括环境准备、STAR索引构建、比对参数设置及结果统计可视化。通过samtools和R脚本实现比对质量评估,提供常见问题解决方案和关键指标解读。该流程强调比对参数优化和质量控制,为后续翻译组学分析奠定基础。

1977

数组名和数组名取地址&

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

caoyuanll的专栏 982

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

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

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

C语言——数组名、取数组首地址的区别

目录: 1. 开篇 2. 论数组名array、&amp;array的区别 3. array、&amp;array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题,各有自己的表述方式,今天在他们的基础上我将继续试着以我自己理解的方式总结一下,欢迎大家的审阅和指评。 2.论数组名array、&amp;array的区别——省政府和市政府的区别 例如: int array[4] = {0}; 总所周知,其中的&amp...

MTALAB 如何绘图 584

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 554

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

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

weixin_41926709的博客 988

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

对于数组a[3],a,&a,a+1,&a+1有什么区别?

qq_39478139的博客 454

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c++数组名,数组地址和指针

今天在牛客网上遇到一道神奇的题目: 下面代码的输出结果是? void main(void) { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&amp;a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 这么一个大坑,我当然做错了,后来在vs上调试: void fun() { int a[5] = { ...

c++ 2299

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

cstriker1407的专栏 90

9-6 字符串的连接和复制

1. 如何拼接两个字符串? strcat() 函数,传入两个字符,将第二个字符拼接到第一个字符的后面。代码如下。 void TestStrcat(){ char* string1 = "Hello"; char* string2 = "World"; strcat(string1, string2); printf("string1: %s\n", string1); // string1: HelloWorld printf("string2: %s\n"...

gltzlike的博客 1007

指向函数的指针(续) - C语言

标题:指向函数的指针(续) - C语言 内容:前面写过《指向函数的指针 - C语言》,本文将在数组指针的基础上对函数的指针探究。 作者:MilkCu 数组名与数组名取地址 我们先来做个关于数组的小实验: # include int main(void) { int a[2] = {3, 4}; printf("a = %d\n", a); printf("&a = %d\n",

MilkCu的专栏 1950

函数参数中指针传参和引用传参的区别

引用符号&amp;和指针*都可以在函数参数中出现,但使用上是有区别的。首先这两种用法如果在函数中对传入的参数有所改变,那么这种改变是会一直保留的,不会在函数作用域外就恢复。当然,也有很多时候我们不希望传入的参数被人为的改变,这时候可以使用const关键字,关于const和引用符号&amp;的搭配,防止传入参数被改变的情况可以参考这篇文章 虽然引用和指针的方式作为传参方式都会保留该函数对传入参数的改变,但这两种方法还是有区别的。这个区别表现在,引用的方式下可以直接使用该参数,而指针的方式通常都需要解引用,或

见牛羊的博客 4142

【无标题】

对如图c语言代码讲解

2602_95909163的博客 320

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

#include 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")

a15994269853的专栏 1870

数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

zxf347085420的博客 5554

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

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

anlian523的博客 3673

C++ 数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

数组名a: 数组名可以作为数组第一个元素的指针。由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&amp;a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= &amp;a[i]。 数组名取地址&amp;a: 对于一个普通的变量b,&amp;b是指用取地址符号取得变量b的存放地址;a在内存中...

Mongo_girl 6621

解析:数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼。使用实例详细解析:数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

loongkingwhat的博客 5万+
上一篇: 联合体的内存大小
下一篇: 第一章 编译原理绪论(1)——编译原理基本概念
Web客栈
博客等级 码龄18年 23粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值