一个关于数组名的例题

第一章 什么是数组名?----一个让你吃惊的事实!         数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字:“一维数组是一级指针”“二维数组是二级指针”“数组名可以作为指针使用”“数组名就是..........的常量指针”“数组名就是..........的指针常量”..................................这些文字看起来非常熟悉吧?类似的文字还有许 阅读详情

原题:

//#include<stdio.h>
//int main()
//{
//	int array[] = { 1, 2, 3, 4, 5 };
//
//	int *p1 = (int*)(&array + 1);
//	int *p2 = (int*)(array + 1);
//	char *p3 = NULL;
//
//	int a = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);
//	printf("%d ", a);
//	return 0;
//}
//输出:11

其中部分疑问?

//#include<stdio.h>
//int main()
//{
//	int array[] = { 1, 2, 3, 4, 5 };
//
//	int *p1 = (int*)(&array + 1);
//	int *p2 = (int*)(array + 1);
//	char *p3 = NULL;
//
//	int a = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);
//	printf("%d ", a);
//
//	//printf("%d ", *p3);//这行代码如果运行一定会出错
//	                     //原因*p3为NULL
//	//问题
//	//为什么上面的 int b = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);可以运行
//	// sizeof(*p3)  对于*p3进行解引用了,为什么没有报错	?
//	return 0;
//}

解析过程:

//1.解析数组名
//#include<stdio.h>
////我们向对于数组进行打印
////                  数组首地址    数组中有效元素个数
//void PrintArray(int array[], int size)
////void PrintArray(int* array, int size)
////两种方式都可以
//{
//	//printf("%d\n", sizeof(array) / sizeof(array[0]));
//	//这行代码在此处不可以运行
//	//原因:array在此处已经退化为首元素地址
//	//printf("%d\n", sizeof(array) / sizeof(array[0]));
//	// sizeof(array)因为在32位平台下,所以这句代码等于4
//	// sizeof(array[0]))因为在32位平台下,所以这句代码等于4
//	//因此这行代码输出结果为1 
//	for (int i = 0; i < size; ++i)
//	{
//		printf("%d ", array[i]);
//	}
//	printf("\n");
//}
//int main()
//{
//	int array[] = { 1, 2, 3, 4, 5 };
//
//	int *p1 = (int*)(&array + 1);
//	int *p2 = (int*)(array + 1);
//	char *p3 = NULL;
//
//	int a = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);
//	
//	printf("%d ", a);
//
//	//在传参期间数组名已经退化为首元素的地址 
//	PrintArray(array, sizeof(array) / sizeof(array[0]));
//	return 0;
//}

//数组名字在两种情况下才代表数组本身--即该段连续的空间
//1.对数组进行取地址 
//2.数组名出现在sizeof之后

//其余数组名表示首元素的地址
//比如:函数传参--》int*

//int* p1 = array;
//int* p2 = array + 1;
//int* p3 = &array[0];
//这三种情况下是等价的

//2.分析其中情况
#include<stdio.h>
int main()
{
	int array[] = { 1, 2, 3, 4, 5 };

	int *p1 = (int*)(&array + 1);
	//&array对于数组名直接取地址---》数组本身
	//&array + 1:相当于跳过这个数组
	//位置在:
	//                丨
	//{ 1, 2, 3, 4, 5 }

	int *p2 = (int*)(array + 1);
	//array相当于数组首元素地址
	//array+1相当于数组第二个
	//位置在:
	//    丨
	//{ 1, 2, 3, 4, 5 }

	char *p3 = NULL;
	//p3指向的是NULL
	//这个指针是一定不可以解引用的
	//解引用必须要看这个空间放的是什么值

	int a = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);
	//p1[-2]
	//延申:
	//int* p = array;
	//array[2] = *(array + 2) = *(p+2);//这三个是相等的

	//p1[-2]=*(p1-2)//两个等价
	//p1[-2]相当于向后移动了两个位置--》4

	//*p2
	//对这个指针p2进行解引用就是--》2

	//sizeof(&array)
	//sizeof(array)代表:这个数组占的总的字节数
	//sizeof(array)=5*sizeof(int)= 20
	//sizeof(&array)这个就是一个指针
	//指针在32位平台下占了4个字节
	//因此sizeof(&array)=4

	//sizeof(*p3)
	//疑问:p3是空指针,在sizeof后解引用程序为什么没有崩溃?
	//答:sizeof在计算表达式时,不会对这个指针进行解引用的 
	//    sizeof后面跟的是类型
	//sizeof(*p3)相当于sizeof(char)
	//char只占了一个字节
	//因此:sizeof(*p3)=1
	
	printf("%d ", a);//4+2+4+1=11
	return 0;
}

萌新一枚,请多多指教。

在Jetson orin板卡上部署ocr模型遇到错误 摘要:安装ONNX Runtime GPU版本时遇到问题,直接pip install onnxruntime-gpu会报错。解决方案是从test.pypi.org下载对应的.whl文件(如ort_nightly-1.14.0...aarch64.whl),本地安装后还需降级NumPy版本(如pip install numpy==1.26),以解决NumPy版本兼容性问题。整个过程涉及三个关键步骤:下载正确架构的wheel文件、本地安装、调整NumPy版本。 阅读详情

相关推荐

ENVI哨兵一号数据处理

使用ENVI+SarScape处理哨兵数据

Rjjjjj11的博客 2万+

数组名、数组类型、函数类型、数组指针类型、函数指针类型详解

1. 数组名 举例:Int a[5] ,打印a的值与打印&a的值相等,但意义不同,a等价于&a[0],所以打印a 的值是打印数组0号元素的地址。&a代表的是取整个数组的地址。 所以a+1表示&a[1]的地址,而&a+1指针会移动整个数组大小。 试验: 试验结果: 从运行结果我们知道,&a和a的值是一样的,但a+1和&a+1,结果完全不一样。 2. 数组类型及函数类型 我们定义一个变...

maguangyuan007的博客 778

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1894

C语言中,数组名作为函数实参时的应用举例

C语言中,数组名作为函数实参时的应用举例 在C语言中,用数组元素作实参时,向形参变量传递的时数组元素的值。而用数组名作函数实参时,向形参(数组名或指针变量)传递的时数组受元素的地址。 举例程序 // 有一个一维数组weight,存放12个男生的体重,求平均体重。 #include <stdio.h> int main() { float average(float array[12]); float weight[12],aver; int n; printf("Please i

qq_18937049的博客 2279

SUMO仿真教程(1) ——安装环境的设置(Windows 10系统)

SUMO安装环境的设置 目录一.SUMO下载的官方网址二.下载步骤:三.环境设置:1.打开设置环境变量的界面2.用户(Administrator)变量设置3.系统变量设置四.总述 一.SUMO下载的官方网址 sumo的下载地址: 二.下载步骤: 1.以sumo1.8.0为示例进行演示,点击下载地址; 2.选择Windows64位的安装版本,如下图所示: 3.点击对应版本会跳转到如下图所示的界面,等待几秒后会自动下载(温馨提示:请将下载路径提前设置好): 4.到目标存储路径下查看下载完成的SUMO(本

weixin_50632459的博客 1万+

OpenBCI脑电数据处理实战:用MNE库从Raw对象到可视化分析全流程

本文提供了使用MNE-Python库处理OpenBCI脑电数据的完整实战指南。从通过BrainFlow库获取原始数据流、创建核心的Raw对象,到进行工频滤波、带通滤波等关键预处理步骤,最后实现时域信号、功率谱密度及地形图等多种专业可视化分析,手把手教你完成脑机接口数据处理的全流程。

gin88的博客 367

数组-高级篇-关于数组名的详解,指针与数组,数组表示法与指针表示法,数组边界,数组序号,const修饰数组

数组-高级篇-关于数组名的详解,指针与数组,数组表示法与指针表示法,数组边界,数组序号,const修饰数组

xiawucha159的博客 1532

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

java练习题——数组

上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果:[Ljava.lang.Object;@2a139a55 为什么会出现这种情况? 直接输出object的对象,系统会输出地址,如果想要输出其中的值,则要用循环下标分别输出。 例如: 转载于:https://www.cnblogs.com/xiaosongbiog/p/4922420.html...

weixin_30301449的博客 166

YOLOv11涨点改进 | 全网独家首发、特征融合创新篇 | ACM 2025顶会 | 引入DAAttn差异感知注意力融合模块,通过动态调整注意力,使模型更准确地识别关键内容,提高精度、并减少冗余计算

本文提出了一种基于DAAttn(差异感知注意力融合)模块改进的YOLOv11模型,用于提升变化检测任务的性能。DAAttn模块通过动态加权特征差异,有效区分有意义变化与噪声(如光照、天气变化),显著提高了模型在复杂场景下的检测精度。该模块采用反转注意力机制,重点关注显著差异区域,同时减少计算冗余。实验表明,改进后的模型在保持计算效率的同时,能够更准确地识别小目标和细节变化。文章详细介绍了DAAttn的原理、优势、实现代码及其在YOLOv11中的集成方法,并提供了两种改进配置方案。

Ai缝合怪、助力小伙伴高效发论文 299

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 232

指针,解引用,指针数组和数组指针的区别,数组名和&数组名的区别

目录:1.指针是什么?2.指针的解引用3.指针数组和数组指针4.数组名和&数组名5.例题求指针和数组大小例1.求下面代码输出的结果例2.求下面代码输出的结果例3.求下面代码输出的结果例4.求下面代码输出的结果6.关于指针和数组开空间的例题 1.指针是什么? (1)指针就是个变量,用来存放地址的变量(指针就是地址) (2)指针的大小是固定的4/8个字节(32位平台/64位平台)      eg: int a = 10;  &nbsp

HanMeng的博客 3267

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数组名+1和&数组名+1的区别

本文介绍数一维数组、二维数组数组名的含义,以及数组名+1和&数组名+1之间的区别

qq_45356679的博客 7795

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

怀旧版电脑GBC模拟器

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

数组名与指针的关系

数组名与指针的关系   在刚刚接触到数组与指针时,我想最常苦恼的问题就是数组名与指针之间有什么关系了吧。但是他们两者之间真的有什么数不清道不明的关系吗?答案无疑是否定的!接下来就让我们来一探究竟吧!   首先我们需要了解一下数组与指针的定义: 数组: 有序的元素序列,数组名有限个类型相同的变量的集合命名。数组在内存中所占的大小由数组长度以及成员类型大小决定。 指针: 又称指针变量,在32位...

Erica_ou的博客 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

以下代码会打印出什么样的日志呢? #include int a[2] = {1,2}; int main(){ printf("a = %p\n", a); // I printf("&a = %p\n", &a); // II

daniel_ice的专栏 4万+

数组名的理解

数组名的理解,看这一篇就够了~

shylyly_的博客 3443

C语言中 数组名 与 ”&数组名” 的区别

(1) 测试代码 :#include&lt;stdio.h&gt;int main(){    int a[5] = {1,2,3,4,5};     printf("a = %p\n",a);         // 数组名代表首地址 .        000000000064FE30    printf("&amp;a = %p\n",&amp;a);    // "&amp;a"代表数组的地址...

i_pangpang的博客 1万+

关于数组名:数组名是数组首元素的地址

为什么数组名表示的是数组首元素的地址捏^_~ 真的不来看看嘛(╹ڡ╹ )

weixin_62234287的博客 7968

数组名是什么?

数组名是什么?

m0_68246456的博客 1万+

数组名是一个指针常量吗?

数组名是一个指针常量这种观点来源于数组名在表达式计算中与指针的结果等效性。例如下面的代码:   int a[10], *p = a, *q; q = a + 1; q = p + 1;   在效果上看,a + 1与 p + 1是相同的,这很容易给人一种a就是p的假象,但,这仅仅是假象。鉴于指针常量包含了指针和常量两类概念,我们可以把这个问题分开两部分进行讨论。   一、数组名是指针

徐维溢的博客 2万+

C++/C的数组名到底是什么?

先定义一个一维数组 int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 一、数组名是什么 数组名经常被隐式转换为指向数组首元素的指针常量: 数组名不是指针,但大多数使用到数组名的地方,编译器都会把数组名隐式转换成一个指向数组首元素的指针来处理。只有两种情况下例外: 第一种是对数组名使用sizeof运算符 sizeof(a) 这将会得到整个数组所占的内存...

qq_36570733的博客 5048

数组名和指针的区别

近段时间在整理自己大学几年来学习C++的点点滴滴,写这篇文章源于看林锐博士的《高质量C++指南》时,看到文章直接把指针和数组名视为同一东西,原文为“数组名本身就是一个指针,是一个指针常量,即a等价于int * const a,因此你不能试图修改数组名的值”,摘自第三版127页第7.2.1小节。     自己初学C++时也被数组和指针搞得昏头转向过,通过多方求证和对比实验已把指针和数组弄得稍明白,

3万+

数组指针的定义,&数组名和数组名的区别

1、数组指针的定义 数组指针是一个能够指向数组的指针。 int(*p)[10]; 解释: p 先和 * 结合,说明 p 是一个指针变量,然后指向的是一个大小为10的整型数组。所以 p 是一个指针,指向一个数组,叫做数组指针。 注意:[ ] 的优先级要高于 * 的,所以必须加上 ()来保证 p 先和 * 结合。 2、&数组名 和 数组名 &数组名 和 数组名 的地址 int ma...

Hots3y的博客 1884

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

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

车子(chezi) 1万+

关于数组名

数组(Array)是有序的元素序列。[1]若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。[1]这些有序排列的同类数据元素的集合称为数组。除了“sizeof(数组名)”和“&数组名”以外,所有的数组名指的都是数组首元素的地址。

weixin_72917087的博客 1161
上一篇: 学习顺序表相关知识,制作一个简易的“动态顺序表”操作(增删查改)
下一篇: 无头+单向+非循环链表增删查改实现(c语言)
sakeww
博客等级 码龄7年 521粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值