当前位置: 首页 > news >正文

大连做网站qq群重庆玖玺国际做网站

大连做网站qq群,重庆玖玺国际做网站,合肥缶间网络科技有限公司,龙华新区做网站【C编程问题集中营】使用数组指针时容易踩得坑 文章目录 【C编程问题集中营】使用数组指针时容易踩得坑一、获取数组首地址二、应用场景举例2.1 正常场景2.2 异常场景 三、总结 一、获取数组首地址 一维数组的首地址即数组第一个元素的指针,常用的获取一维数组首地…

在这里插入图片描述

【C编程问题集中营】使用数组指针时容易踩得坑

文章目录

  • 【C编程问题集中营】使用数组指针时容易踩得坑
    • 一、获取数组首地址
    • 二、应用场景举例
      • 2.1 正常场景
      • 2.2 异常场景
    • 三、总结

一、获取数组首地址

一维数组的首地址即数组第一个元素的指针,常用的获取一维数组首地址的方式有如下几种,以unsigned char类型的TestArray[4]数组举例:

  • TestArray
  • &TestArray[0];
  • &TestArray;

代码中通过以上三种方式中的任意一种方式均可获取到TestArray[4]数组的首地址,通过第三种方式获取数组首地址时,与其他两种在对首地址使用时表现有可能是不一样的,需要特别注意下,下面会对其应用场景进行举例;

二、应用场景举例

2.1 正常场景

正常场景的代码实现举例如下所示:

#include "stdio.h"unsigned char TestArray[4]   = {11u, 22u, 44u, 55u};
unsigned char TestArray_1[4] = {66u, 77u, 88u, 99u};void TestArrayDataFun(unsigned char *Data)
{if (Data != NULL){printf("TestArrayDataFun: %d %d\r\n", *Data, *(Data + 1));}
}int main(void)
{TestArrayDataFun(TestArray);TestArrayDataFun(&TestArray[0]);TestArrayDataFun(&TestArray);return 0;
}

从功能上来看,TestArrayDataFun函数会输出打印传入指针的第一个和第二个数组元素,对应的就是想输出TestArray数组的第一个和第二个元素,代码输出结果如下所示:

TestArrayDataFun: 11 22
TestArrayDataFun: 11 22
TestArrayDataFun: 11 22

从输出结果来看,三种获取数组首地址的方式是一样的。

2.2 异常场景

异常场景的代码实现举例如下所示:

#include "stdio.h"unsigned char TestArray[4]   = {11u, 22u, 44u, 55u};
unsigned char TestArray_1[4] = {66u, 77u, 88u, 99u};void TestArrayDataFun(unsigned char *Data)
{if (Data != NULL){printf("TestArrayDataFun: %d %d\r\n", *Data, *(Data + 1));}
}int main(void)
{TestArrayDataFun(TestArray);TestArrayDataFun(&TestArray[0]);TestArrayDataFun(&TestArray);TestArrayDataFun(TestArray + 1);TestArrayDataFun(&TestArray[0] + 1);TestArrayDataFun(&TestArray + 1);return 0;
}

从上述代码的逻辑来看,想要实现的功能是分别采用三种获取数组首地址的方式来打印出数组的第一个和第二个元素以及数组的第二个和第三个元素,最终代码执行后的结果如下所示:

TestArrayDataFun: 11 22
TestArrayDataFun: 11 22
TestArrayDataFun: 11 22
TestArrayDataFun: 22 44
TestArrayDataFun: 22 44
TestArrayDataFun: 66 77

前5个输出的结果与我们预期的一致,但是最后一个输出的结果与我们预期的不一致,大家可以仔细看下代码逻辑,输出的66和77是TestArray_1数组的第一个和第二个元素,并非TestArray数组的第二个和第三个元素,这是因为什么呢?

三、总结

直接说结论,以&TestArray方式获取数组首地址指针,其指针类型为整个数组大小对应的指针类型,在对其指针进行+1操作时,其指针偏移直接偏移了整个数组的大小,即偏移到了TestArray_1数组的首地址位置,所以再去提取数据时就取到了TestArray_1数组的第一个和第二个元素。

而为什么调用 TestArrayDataFun(&TestArray);函数,在函数内部进行+1操作就没有问题呢,是因为传参时相当于进行的强制类型转换,将其指针类型强转为unsigned char *,因此后续对其进行+1操作时只偏移了一个字节的地址;

http://www.yayakq.cn/news/567995/

相关文章:

  • 建设设计网站寿光网站建设哪家好
  • 做静态头像网站wordpress commerce
  • 天天向上 网站建设投资建设集团网站首页
  • 商城网站都有哪 些功能盐城网站优化推广服务
  • 随州网站seo911制品厂麻花
  • 城阳建网站wordpress 左侧菜单栏
  • 宝塔搭建网站教程谷歌推广网站怎么做
  • wordpress自动建议搜索引擎不抓取优化资源配置
  • 网站 规划网站流量多少做网盟
  • 网站设计评价网站建设公司应该怎么做推广
  • 跑步机网站建设思维导图如何关联网站与网站
  • 什么网站时候做伪静态wordpress大家都用什么主题
  • 怎么制作一个简单的网站福州做网站多少钱
  • 三只松鼠网站开发模板自己想做个网站
  • 网站建设书模板wordpress 自定义表单插件
  • 电子商务网站网络安全设计方案河南省建设执业资格中心网站
  • 昆明做网站找启搜网络站内推广方案
  • 25个网站黑龙江建设网官
  • 海南住房和城乡建设部网站网站建设做什么科目
  • 政务公开与网站建设网页站点
  • 上海营销型网站报价移动宽带过期了怎么续费
  • 电子商务建设网站什么是成品网站
  • 单页网站怎么做竞价南京公司网站建立
  • 自己做一网站 多做宣传.建设视频网站需要什么知识
  • 龙岗汤坑社区网站建设国家开发银行网站
  • 网站后台登陆路径网络营销招聘岗位有哪些
  • 女性开源网站官方网站下载安装云支付
  • 电子商务网站设计与制作网站代码优化视频教程
  • 如何建立自己的微网站河南省百城建设提质工程网站
  • 怎么做招聘网站的调研关于wordpress更新时无法创建目录