合金电阻,赛普欢迎您!

[C语言说明]关于数组的陷阱!

首页 > 资讯

问题通过减去两个数组元素的地址,您会得到什么?我们先来看一段代码:#include& lt; stdio.h& gt; int main(void){int a [] = {0,1,2,3,4,5}; printf(“& a [0] =%d,& a [2] =%d "& amp; a [0]和& amp; a [2]); return 0;}该代码以十进制形式输出编号为0的元素和编号为2的元素的地址,输出结果为:& amp; a [0] = 2686760,& a [2] = 2686768那么,& n& amp; a [2]-& a [0]的结果是8?然而,这种情况并非如此!!让我们将结果打印出来:原来是2!让我们输出& amp; a [5]-& amp; a [2]的结果,看看规则是什么:陷阱原来是两个数组元素的地址相减。

该值不等于两个地址的值之差,而是等于两个地址之间的存储单元数。

在此示例中,数组的类型为int型,并且在32位编译环境中进行编译,因此此处的存储单元的大小为4个字节。

因此,在此示例中,& amp; amp; a [2]-& amp; a [0]的值为:(2686768-2686760)/ 4当然,如果它是下位元素的地址减去高位元素的地址,结果是一个负数:我在互联网上看到一个博客来确认这一点:https://blog.csdn.net/harvic880925/article/details/8953854这很容易出错问题,需要特别注意!使用我们的C语言进行日常练习(004),主题是第一次找到数组元素的位置。

在函数的返回值是要查找的元素的下标之前,提供了两种方法。

这里可以做一些修改,以获取第三个方法,我们的第三个方法返回要查找的元素的指针://函数返回找到的元素的指针int * serch(int * arr,//头指针已知数字表int n的// //数字表int键中的元素数)//要找到的值{int * p; for(p = arr; p& lt; arr + n; p ++){if(* p == key){返回p; //返回找到的元素的指针}}返回NULL; //找不到密钥}完整的验证码是/ ***************** ******************* *********************************** ******************* ***************** **标题:同一数组中两个元素的地址相同Less **************** ************************************** ****************** ************************************** ***** / #include& lt; stdio.h& gt ; //该函数返回找到的元素的指针int * serch(int * arr,//已知数字表的第一个指针int n,//数字表中元素的数量Number int键)//的值找到{in​​t * p; for(p = arr; p& lt; arr + n; p ++){if(* p == key){返回p; //返回指针以找到元素}}返回NULL; //找不到键} //定义一个全局数组int a [] = {5,2,0,13,14,999,666,55,66,88,1,5,9}; // main Function int main(void){int i,key; int * p_a; printf(“数组a的元素是: ”); for(i = 0; i& lt; sizeof(a)/ sizeof(a [0]); i ++){printf(“%d”,a [i]);} puts(“ 请输入您要搜索的键号:“); scanf(“%d”,& key); p_a = serch(a,sizeof(a)/ sizeof(a [0]),key); printf(“ 数组中键号%d的索引是:%d。

“,键,p_a-a);返回0;验证结果相同。

-END-猜猜您喜欢机器人如何生活吗?<<< Poke在这里谈论嵌入式和单芯片计算机,相爱并互相残杀。

在这里做技术,谈论研发。

<<在这里戳 最后& nbsp;  & nbsp;如果您认为本文不错,那么转发并分享它也是我们不断更新的动力。

5T资源被释放!包括但不限于:C / C ++,Linux,Python,Java,PHP,Smart,PCB,FPGA,DSP,labview,单片机等!回复“更多资源”在官方帐户中,您可以免费获得它,期待您的关注〜长按识别图片中的QR码以关注

cache
打开客服菜单