数组指针之茴香豆有几种写法

自动驾驶中的多传感器融合实战:用卡尔曼滤波搞定毫米波雷达与摄像头航迹对齐 本文深入探讨了自动驾驶中多传感器融合的实战技术,重点介绍了如何使用卡尔曼滤波实现毫米波雷达与摄像头的航迹对齐。通过分析传感器特性差异、时空同步挑战及工程化实现步骤,提供了包括状态向量定义、观测矩阵设计和故障检测机制在内的完整解决方案,最终实现0.15米以内的高精度航迹对齐。 阅读详情

C语言函数只能返回一个值,如果想要在函数中修改多个值怎么办呢?

第一个办法是通过结构体,第二个办法就是使用指针了。

可以把变量的地址传给函数,然后通过指针修改该地址上的值。例如:

float data;

void add_one(float *data)
{
*data++;
}

int main()
{
add_one(&data);
}

但是有的时候,需要更改多个数值怎么办呢?这时候就可以使用数组指针。

数组指针,顾名思义,就是一个指向数组的指针。写法如下:

float (*pointer)[3];

这样就定义了一个float类型指针,指向3个长度的float数组。

于是,我们可以这么写:

float data[3] = {0, 1, 2};

void set_one(float (*data)[3])
{
(*data)[0] = 1;
}

int main()
{
set_one(&data);
}

编译成功。那么除了这种写法,还有没有其它写法呢?当然有,就像茴香豆的茴字一样,向函数传递数组也有多种写法。

要知道每种写法的原理,首先要知道数组传参的原理。

其实很简单,数组的内存是连续的,从第0位到最后一位,每一位数据都占据着相同大小的内存,且中间没有间隔,而 &data 是把data数组占据的全部内存地址传递了进去。

但是!

理论上来讲,我们只需要知道数组的长度,数组的类型,以及其中某一位数据的地址和下标,不就可以推出来整个数组中其它位数据的地址了吗?

验证一下,我们将代码改成:
int main()
{
set_one(&data[0]);
}

我们把第0位的地址传进去试试,发现编译通过,且结果正确。

但是编译器发出了警告:expected ‘float (*)[3]’ but argument is of type ‘float *’

原来是传入的地址大小和指针的大小不匹配,但是由于我们按照正确的地址进行了操作,所以结果还是正确的。

除此之外,我们还可以省略掉&。这是因为:

当我们定义一个数组后:float array[10],其中,数组名array其实代表了该数组的起始地址,也就是说,array 等价于 &array[0]。

当然了,除非我们非常有把握可以找到正确的地址,否则不推荐这么写。

除了这些写法,还有一些更加简单,但是更加烧脑的写法,如下:

void set_one(float *data)
{
data[0] = 1;
}

int main()
{
set_one(&data[0]);
}

注意,我们没有使用数组指针了,但同样地,由于类型匹配,依然可以用单个指针去操作数组。

但是,按理说,data代表了地址,*data才是地址上存储的值,为什么赋值要写作data[0] = 1,而不是(*data)[0] = 1呢?

这是因为*data是一个普通的指针,而不是数组指针,这么写当然会报错。而data[0]则是按照数组类型,去到对应的地址进行操作,这或许是编译器的特性吧!

根据我们之前讲的,我们也可以传递不同的地址:

set_one(&data[0]);
set_one(&data);
set_one(data);

这样一来,我们总共就有了整整六种写法,这可比茴香豆的茴字写法还多了两种。不过,我们不需要自己硬背,只需要理了地址和内存,想怎么写都是不会出错的。

当然,真上项目的时候,还是推荐大家用最稳妥的方式去写,这篇文章里其中几种写法,其实和孔乙己卖弄文字一样,没有实际意义,但却可以加深初学者对地址和内存的理解,权当看个乐子吧。

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践 智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe 阅读详情

相关推荐

嵌入式软件面试常见问题及答案

干了多年的嵌入式,被面试过,也面过不少新人,下面这些是面试中很常见的一些问题及答案,答案可以根据自己的经验自己思考下。--持续补充并更新

weixin_37553721的博客 6022

【C语言】指针数组和多维数组

数组:一块连续的空间,存放相同数据类型的数据。 指针数组:就是一个数组,数组里的元素是指针。 多维数组:也是一个数组,数组里的元素是数组。 情景再现 我们知道 char * str = "hello"; 这里用的是64位操作系统: str是一个指针,指向一个字符串,字符串里面的内容是hello。 一个指针所占内存是8个char类型的大小,也就是8个字节(Byte)。 "hello"字符串有5个字母,每个字母占一个char,另外末尾其实有一个’\0’的结尾符,也在一个char。所以一般字符串大小是字符串的能

qq_28809149的博客 387

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 628

指针声明解析

2.A带入声明: int *(*A(int))[10] , A往右边看是括号, 说明A是一个函数,有一个int参数, 再看左边, 是*, 说明A是指针函数. f又是指针指向A这个函数, 这部分模拟成B。//这两个指针的本质是一个变量,有自己空间, *fa和*(fa+1)是这两个变量空间的地址::::::://指针数组的元素地址需要在普通数组的基础上加一个*才是地址.int a1=1,b=2,c=3,d=4,e=5,f1=6,g=7,h=8,i=9,j=10;//10个元素,有10个指针地址.

沫.忆.失.忆 515

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3732

ROS 入门教程:小乌龟仿真器和基础操作

小乌龟仿真器和ros基础操作

zlflll的博客 4124

“茴字有六种写法”式的C语言笔试题

今天在优快云上真的看见了孔乙己式的问题:用C语言,不用四则运算,对一个变量进行加1操作。答案是(i在某处定义了):i = (int)&(((char*)i)[1]);想出这个问题的兄台真是够孔乙己的——除了用+、-、*、/和++,还有别的方法对一个变量加1——茴香豆的“茴”字有六种写法……据说这是一道笔试题。sigh……有钻研精神,可是没有实用主义。 在这里解释一下为什么能够实现

上善若水.class 4万+

手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南)

本文详细解析了Realsense D455在ROS环境下IMU数据不输出的问题,提供了固件降级和ROS配置的完整解决方案。通过版本兼容性分析和实战操作指南,帮助开发者快速恢复IMU数据流,优化机器人开发体验。

weixin_42531494的博客 371

char*类型的数组的访问问题

char*数组的千奇百怪访问方式

m0_51606983的博客 877

全景相机APP

以下是一款**全景相机APP**的完整源码,支持全景照片拍摄(多帧拼接)、全景预览、鱼眼矫正、图片保存/分享、360°全景查看等核心功能,基于Android原生Camera2 API(替代过时的Camera API) + OpenCV(图像拼接) + GLSurfaceView(全景预览)实现,适配Android 8.0+设备,可直接编译运行。runOnUiThread(() -> tvFrameCount.setText("已拍摄:" + frameCount + "帧"));// X轴旋转(上下)

寒寒豆豆软件公司的博客 179

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 210

快速排序的三种写法

快速排序 引言 ​ 孔甲己一到店,跟柜里说,“来一杯茶,要一碟茴香豆。”便排出九文大钱。看没人理自己,便对记账的小童问道,这茴香豆的茴字有四种写法,你知道么? ​ 近期闲来看了看快速排序,核心思想也就在于,找到一个可以作为中间分隔的数字,再将大的放到左边,小的放到右边,重复数次。 ​ 在网上查找相关资料,找到了快速排序的3种写法 所使用到的接口和抽象类 注:只是为了练习泛型,并且让测试更加方便。 ...

再无此人的博客 433

基于STM32设计的智能家居控制系统(华为云)_363

本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向

880

C++编程 - 回字有四样写法,你知道么?

C++编程 - 回字有四样写法,你知道么? 作者:flyfish 2014-3-31 茴香豆的茴字,怎样写的?这次孔乙己一把,循环多种写法,排除while,do while,排除第三方库,Boost库等 开始分茴香豆吃 首先定义一个向量vecCollection,添加10元素, 目的在vecCollection中统计大于5的元素的个数。   填充元素 int nCount =

二分掌柜的 2544

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[c/c++]分析c语言声明优先级规则

 Filename:[c/c++]分析c语言声明优先级规则Version:V1.0Date:12/09/2009Author:S.C.Leon =====================================================================一、问题的引入:先看几个例子:1)请指出下列表达式的含义。int *ap[

砚的专栏 1436

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【day1】数组1

困了,不想debug了

danta233的博客 784

爱奇艺秋招C++笔试复盘:指针、内存与算法基础

在C/C++岗位的校招笔试中,语言基础和底层原理往往比框架更受重视。从指针的本质、字符串存储机制到内存生命周期管理,再到排序算法与图论最短路径的工程实现,这些核心概念构成了考察候选人基本功的关键维度。理解值传递与地址传递的区别、熟悉堆栈与常量区的差异、掌握标准文件读写流程,不仅能提升代码的健壮性,也是视频技术类公司对C++工程师的底层要求。面对这类笔试题,系统复盘经典题型、强化边界处理意识、注重编译链接流程,能帮助求职者高效查漏补缺。本文以爱奇艺2019秋招C方向笔试题(B卷)为例,梳理高频考点与解题模板,

weixin_33816300的博客 374

一个现代孔乙己的职场生涯

听人家背地里谈论,现代版孔乙己郑乾原来也考过研,但苦于没有实习经历,又没关系内推,进不去字节跳动等大公司,只好进到小公司了,但苦于小公司每月铜钱只有几个。

qq_44682019的博客 733

opencv-5-图像遍历与图像改变

目录 文章目录目录开始图像的像素点访问与遍历opencv 座标定义下标访问指针访问迭代器法访问遍历访问时间对比图像操作图像叠加代码编写执行结果图像"拼接"图像 相减亮度和对比度操作亮度操作伽马矫正(Gamma)其他 开始 图像的像素点访问与遍历 我们在上一篇文章中已经 大概介绍了 mat 图像的数据格式, 实际上可以理解为一个二维数组的格式, 那么 茴香豆的茴字一共有几种写法 访问一个像素点有几...

Fxxk CPP 800

网易校招C++笔试卷深度解析:底层机制与高频考点全拆解

在C++开发工程师的求职路上,笔试往往是一道分水岭。无论是校招还是社招,大厂面试对C++底层机制的考察从未放松,从虚函数表的内存布局到智能指针的引用计数原理,从进程线程的调度开销到TCP三次握手的可靠性设计,这些看似基础的知识点,实则是解决高并发、内存泄漏、死锁等真实工程问题的关键工具。理解C++内存分区与生命周期,掌握RAII与资源管理范式,熟悉操作系统同步机制与网络协议状态机,并能在算法题中快速构建出正确的二分查找或动态规划解法,这些能力共同构成了一个合格C++工程师的底层素养。网易2018年校招笔试卷

weixin_33462167的博客 348

【滑动窗口】LeetCode题集

滑动窗口力扣题目记录

cgb18thu的博客 205

计算机与苦难哲学

在许多狂热的FreeBSD 粉丝里,他们甚至不允许别人把FreeBSD写作freebsd,要和你强调,F和BSD都是大写的。还说这是什么尊重之类的东西。大抵和孔乙己的茴香豆的茴的有四种写法一样吧:“FreeBSD拼写有四样写法,你知道么?”,“不能写罢?……我教给你,记着!‘FreeBSD’、‘freeBSD’、‘Freebsd’、‘freebsd’这些字应该记着。以后做FreeBSD管理员的时候,写文档要用。” 我觉得这是一种病。用自己的要求规范别人。起码和孔乙己是一样的。 狂热粉一到店,所有喝酒的人便都

weixin_52076511的博客 291

从冒泡排序到动态规划:Python算法思维实战指南

算法不是需要死记硬背的模板,而是一套描述状态变化与优化路径的思维方式。以Python为工具,从冒泡排序的边界控制到快速排序的分区思想,再到二分查找的等号陷阱,每一步都在训练对循环不变量和复杂度的敏感度。进阶到贪心、动态规划与剪枝回溯时,核心在于状态定义与转移方程的设计,这不仅是面试题的关键,更是爬虫策略、量化交易甚至国密算法移植等真实工程场景中的底层骨架。理解变量引用、善用deque与堆等数据结构,能让代码在效率和简洁之间取得平衡。本文基于工程实践,帮助初学者跨越从语法到思维的鸿沟,真正掌握可迁移的算法能力

weixin_31742871的博客 277

c++和c的区别

c++和c的区别 不知道是第几次困惑于C++的复杂性。不错,相比于其他语言,C++是很不好理解,而且一不小心,开发效率极慢。原因是?内存管理?C语言很容易就精通;面向对象?Java、Python等上手快开发速度也快;template,Haskell的泛型更好;C++的主要组成部分,分开来学习,都不复杂,但是一旦强行将它们拧在一起,自然就造成莫名的喜感。特别是,在提供高抽象的同时,还要费神劳力照顾内存,就很容易精神分裂。同时,C++完全灵活开放的语法组合,多姿多彩无穷无尽的选择,让人无所适从,很容易就迷失在茴

weixin_44461193的博客 475

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 329

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 264
上一篇: 电机控制(1)直流电机的控制
下一篇: 电机控制(2)直流电机的simulink仿真
求你早点睡吧
博客等级 码龄7年 131粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值