C++中动态创建二维数组——尴尬的不支持C99的VC

C++操作Excel全攻略:LibXL、libxlsxwriter与OpenXLSX选型与实战 在数据处理与自动化领域,程序直接读写Excel文件是常见的工程需求。其核心原理在于通过库文件解析.xls/.xlsx的文件格式,绕过启动Excel应用程序,实现高效的数据交互。这项技术的价值在于为C++这类高性能、需深度集成的系统提供了原生数据处理能力,避免了引入脚本语言或手动操作带来的性能与依赖问题。它广泛应用于工业控制软件的数据分析模块、财务对账工具、游戏配置表导出及海量报表批量处理等场景。本文聚焦于C++操作Excel的实战方案,深入对比分析LibXL、libxlsxwriter和OpenXLSX三大 阅读详情

很多老外公布出来的算法代码常常是在Linux下实现的。很多时候会遇到动态数组定义。

举个二维数组的例子:

这是C99[6 ]标准中新添加的特性[3 ,4 ,5 ]。

C99 gives C programmers the ability to use variable length arrays, which are arrays whose sizes are not known until run time. A variable length array declaration is like a fixed array declaration except that the array size is specified by a non-constant expression. When the declaration is encountered, the size expression is evaluated and the array is created with the indicated length, which must be a positive integer. Once created, variable length array cannot change in length. Elements in the array can be accessed up to the allocated length; accessing elements beyond that length results in undefined behavior. There is no check required for such out-of-range accesses. The array is destroyed when the block containing the declaration completes. Each time the block is started, a new array is allocated.[4]

GCC编译器具有对C99标准比较完善的支持,而VC的编译器部分支持C99,但还不支持这种动态数组定义。

我的测试环境是VS 2008,不过至今VS2010都没有支持:

This version of Visual C++ is not conformant with the C99 standard.[8 ]

 

Thank you for your comment. There's no plans for VC to support C99.[9 ]

因此,要想在VC中编译老外的代码,要改写成动态创建的数组。

改法如下:

最后释放:

 

简单例子:

后话:

 

  从MS Visual Studio开发小组的态度来看,近期之内,不会对C99进行完整的支持[7 ,8 ,9 ],这就意味着,可能在Windows下跑老外的Linux算法的时候涉及更多的代码改编。
  因此,自然就要想到,如何让Visual Studio支持C99,我还没有去尝试,不过这里有篇帖子《VC里边怎么用C99》[10 ],方法是在VS中使用Intel C++编译器,抽时间可以试一下。

 

 

Referrences:

 

[1]Image Segmentation Code,http://cms.brookes.ac.uk/staff/PhilipTorr/Code/seg_page_1.htm

[2]C++中二维数组的动态创建与处理,http://www.programfan.com/blog/article.asp?id=25162

[3]可变长数组在GCC编译器中的实现,http://hi.baidu.com/wch20088082008/blog/item/1a7e09256b53c825d40742a7.html

[4]C语言变长数组之剖析,http://blog.chinaunix.net/space.php?uid=7897183&do=blog&cuid=220612

[5]我很满意C99的这几个特性(2) —— 定义变量和不定长数组,http://hi.baidu.com/zotin/blog/item/ca0f9023972c0f49ac34deb3.html

[6]C99 - Wikipedia, the free encyclopedia,http://en.wikipedia.org/wiki/C99

[7]Visual Studio support for new C / C++ standards?,http://stackoverflow.com/questions/146381/visual-studio-support-for-new-c-c-standards

[8]C Run-Time Libraries,http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

[9]C99 support ,http://connect.microsoft.com/VisualStudio/feedback/details/653336/c99-support

[10]VC 里边怎么用C99?,http://playmov.cn/post-16.html

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

C语言新手可直接上手的编译调试包,含Dev-C++和VC6工程文件

专为零基础学习者准备的一套即拿即用C语言代码资源,里面包含new.cpp这样的主程序源码,以及zg.dsw、q.dsw等完整VC6工程文件,还有适配Dev-C++的项目结构。所有代码严格遵循C89/C90标准,不调用复杂库函数,只用printf、scanf、for、while、数组等基础语法,变量命名直观,关键步骤都加了中文注释。压缩包里3892050可能是版本号或项目标识,new文件夹可能存放更新内容。导入任意一台装有VC6或Dev-C++的Windows电脑后,不用改路径、不装额外组件,点一下编译就能跑

tt34567的博客 249

【C++】VS2022 利用new开辟动态数组

同样的语句在Dev上允许编译通过,而在VS上则会提示“[ ]”内必须有常量值。这是因为不同的编译器对C++的支持不同。当我们需要在VS创建动态数组时,就要借用new动态创建数组了。

晚安的博客 1473

VC6环境下可直接运行的C语言背包问题完整工程包(含源码、编译文件与exe)

这个资源是专为VC6.0环境准备的背包问题完整实现,打开即用。核心源码在背包.cpp中,已通过VC6编译验证,无需额外配置就能生成可执行程序。工程文件包括背包.dsw和背包.dsp,确保项目能正常加载;Debug目录下有.obj、.pdb、.ilk、.pch等编译中间文件,支持断点调试和增量编译;.ncb和.pch提升大型项目编译效率;vc60.idb和vc60.pdb辅助调试符号定位。所有文件结构清晰,命名规范,适合算法课设、数据结构实验或C语言实践参考。用户只需修改背包.cpp中的物品数量、重量数组、价

yoga7的博客 196

VS如何支持C99?

(不过VS还以为原有的test.cpp还在这里面,你把它屏蔽了就行。右键你要屏蔽的文件-左键属性-然后把下图中这里蓝色的改为“是”前言:最近用VS码代码的时候发现有C99特性的一直编译失败。可以看到我将test.cpp改为了test.c文件。源文件-添加-现有项。

virtualxiaoman的博客 4450

VC支持c99标准的:msinttypes-r26.zip

分享出来,因为官网下载地址 失效:http://msinttypes.googlecode.com/files/msinttypes-r26.zip

Unity嵌套ScrollView滑动冲突解决方案:ExecuteEvents.Execute事件透传

在Unity UGUI中,竖向与横向ScrollView嵌套时出现滑动失效,本质是EventSystem事件分发机制的拦截限制。其原理在于PointerDown被外层捕获后,后续PointerMove默认不向下透传;ExecuteEvents.Execute提供了一条绕过常规冒泡流程的官方事件旁路,支持低延迟、方向自适应的精准透传。该技术具备高兼容性与零侵入特性,广泛应用于电商商品页、内容流卡片组、多级导航等需‘列表中嵌套轮播/标签’的真实场景,是解决UGUI嵌套滚动问题的核心工程实践方案。

weixin_33164198的博客 633

C89和C99标准比较

C89和C99标准比较  原文转载自: http://blog.programfan.com/article.asp?id=14051 注: GCC支持C99, 通过 --std=c99 命令行参数开启,如:  代码:gcc --std=c99 test.c --------------------------------------------------------------------

xgbing 8823

RK3588+TRL8367s 四网口千兆交换机配置与优化实战

本文详细介绍了基于RK3588高性能SoC与TRL8367s千兆交换芯片构建四网口交换机的完整实战流程。内容涵盖硬件连接、设备树配置、内核驱动加载、性能优化及常见问题排查,重点解析了RGMII时序调试、DSA架构配置等关键步骤,为嵌入式网络设备开发提供实用指南。

weixin_29266647的博客 675

报错:表达式必须含有常量值

示例错误代码 void test(int n){ array<int,n>arr; } 报错error: ‘n’ is not a constant expression 解释 因为n不是一个常数,需要运行时才能确定分配内存的大小,自然无法在编译时确定,所以在编译的时候会报错。 解决办法 当分配内存大小需要在运行时才能确定时,一般使用动态分配内存。 使用完之后别忘了delete(array new对应array delete) void test(int n) { int*

m0_48966435的博客 7349

如何免费访问和使用Gemini API?

Gemini Ultra具有最先进的性能,在几个指标上超过了GPT-4的性能。它是第一个在大规模多任务语言理解基准测试中超越人类专家的模型,该基准测试57个不同学科的世界知识和解决问题的能力。Gemini是谷歌迄今为止开发的最先进、最庞大的AI模型。它为多模态而建,理解并处理不同类型的数据,比如文本、代码、音频、图像和视频。下面我们将加载Masood Aslami的图像,并用它来测试Gemini Pro Vision的多模态性。有了Gemini可以为查询提供图像、音频和文本,获得几乎完美的答案。

java_cjkl的博客 1万+

[QT笔记]QTableView与QTableWidget表头设置实战对比

本文深入对比了QT开发中QTableView与QTableWidget在表头设置上的核心差异与实践方法。QTableWidget提供开箱即用的便捷API,适合快速开发;而QTableView遵循模型-视图架构,表头数据由模型管理,虽设置稍复杂但灵活性与扩展性更强。文章通过实战代码示例,详细解析了两种组件的适用场景、性能考量及常见避坑指南,帮助开发者根据项目需求做出高效选择。

weixin_29018335的博客 322

C++ 用变量为数组赋予长度

In C++, variable length arrays are not legal. G++ allows this as an "extension" (because C allows it), so in G++ (without being-pedanticabout following the C++ standard), you can do: int n = 10;double a[n]; // Legal in g++ (with extensions), illegal in ..

m0_37965811的博客 1903

近几年预训练语音大模型汇总

语音大模型研究近年来取得显著进展,主要包括wav2vec 2.0(2020)、HuBERT(2021)、WavLM(2022)、Data2Vec(2022)、Whisper(2023)等代表性工作。这些模型采用自监督学习框架,通过掩码预测、对比学习等策略在大规模语音数据上预训练,可有效应用于语音识别、情感分析、疾病检测等下游任务。其中wav2vec 2.0首次将对比学习引入语音领域,Whisper通过68万小时弱监督数据实现强大的跨语言能力。这些突破为低资源语音任务提供了通用特征提取方案,推动了医疗语音分析

victory0431的博客 1780

C语言学习 二维数组

二维数组

baiai_weiyuhai的博客 154

[QMT量化交易小白入门]-九十五、多因子选股和趋势择时股票量化交易策略,年化收益率40.61%

本策略采用“双层过滤”机制:第一层基于多维度财务指标进行股票池筛选(多因子选股),第二层运用均线系统和MACD指标实施动态择时(趋势跟踪)。这种设计既保证了组合的质量下限,又能灵活应对市场波动。因子配置科学性:涵盖估值、成长、盈利、动量四大类因子风险控制精细化:设置动态止损与仓位管理机制信号验证严格性:多重条件交叉验证提升胜率。

木头大左的博客 801

[Dify] 【实战笔记】优化 Excel 电话簿类知识库检索效果的实战技巧

摘要:文章分析了Dify知识库在处理Excel结构化数据(如电话簿)时出现的检索异常问题,发现主要原因是默认召回多条记录且缺乏精准匹配机制。提出两个核心解决方案:1)优化知识库召回参数,包括调整TopK值、提高关键词权重等;2)设计精准提示词模板,明确约束模型行为范围。通过对比测试验证了优化效果,并给出进阶建议如数据格式转换、输出格式化等。最后针对知识检索类AI应用提供了场景适配建议。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 368

C/C++ 一些知识点总结

临时整理的,有些可能不对。 1)如果一个类里面有const-qualifier或reference, compiler不会为它生成default copy assignment operator函数。 2) Hidden是指子类和父类有同名函数,但又没有virtual关键字。这里函数只要同名就可以了,参数并不需要match。也就是说,compiler只要在子类看到有这个函数名,即使参数不...

roufoo的博客 3399

怀旧版电脑GBC模拟器

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

c语言---数组

数组 数组结束位为’\0’ 二维数组定义时,一维大小可缺省,但二维大小必须指明确定值; 错误使用实例: char b[2][3]={“a”,“b”,“c”}; 错误,只有2行,却定义了3个字符串 数组的使用: 访问二维数组b的第i行第j列的方式: b[i][j] *(b[i]+j) (*(b+i))[j] 这里*(b+i) == b[i] 比较分析 int array[3][4]; *(array[i]+j)则是第i行中的第j个元素,即array[i][j] *(array+i)是行地址,

qq_42024067的博客 234

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言数组长度定义:从编译时常量到变长数组的演进与实践

在C语言中,数组是一种基础数据结构,其长度定义规则直接关系到内存分配机制。传统C语言要求数组长度必须是编译时常量,这源于编译器需要在编译阶段确定内存布局,以便在栈或数据区分配固定空间。随着C99标准的引入,变长数组(VLA)允许使用运行时常量指定数组长度,将动态内存分配的部分工作以更简洁的语法转移到栈上,提升了代码的灵活性。然而,VLA也带来了栈溢出风险和编译器兼容性问题,尤其在处理不可信输入或跨平台项目时需谨慎使用。在实际工程中,开发者需根据场景在编译时常量数组、变长数组和动态内存分配之间做出权衡,例如对

weixin_34357436的博客 392

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言学习路径:从环境搭建到项目实战的完整指南

C语言作为一门接近底层的编程语言,其核心在于理解计算机如何管理内存和执行逻辑。其原理涉及变量、数据类型、函数、指针等基本概念,通过直接操作内存和硬件资源,实现对计算过程的精细控制。掌握C语言的技术价值在于为学习操作系统、嵌入式系统、编译原理等底层技术打下坚实基础,并能培养严谨的编程思维。在实际应用场景中,C语言广泛用于系统软件、驱动开发、嵌入式设备及高性能计算领域。本文基于【环境搭建】和【项目实战】等关键环节,提供了一套从零开始、注重动手实践的学习路径,帮助学习者避开常见陷阱,高效掌握C语言核心语法,并通过

congsikuai0611的博客 492

c++(五)、对象和类(三)

一、断言与常量表达式 1、常量表达式与c++11中的constexpr关键字 常量表达式是编译期可以计算值的一个表达式。 //eg.c++数组的大小要求是编译期的一个常量; int n = 1; n++; std::array<int, n> a1;//error:n is not a constant expression; const int m = 2; std::array<int, m> a2;//ok,m is a constant expression; 而c

GuiHuaCaiZi的博客 327

Variable length arrays (C++ only)

http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzarg%2Fvariable_length_arrays.htm Variable length arrays (C++ only)   A variable length array, which is a C99 feature, is an arr...

weixin_34273481的博客 1040

VC++ 2010对C99的支持

VC++支持ANSI C毋庸置疑,不过对于是否支持C99,我倒看到两种说法: 1. 不支持C99. http://en.wikipedia.org/wiki/Visual_C%2B%2B#Issues 2. 支持C99的个别特性. http://en.wikipedia.org/wiki/ANSI_C#Compilers_supporting_ANSI_C http...

delaoguai7289的博客 1586

处理iOS开发中的各种警告

iOS开发中我们会遇到各种警告,包括第三方不再支持更新导致的警告,苹果一些过时方法的警告,其中尤其是ASIHttpRequest的不支持更新导致有很多的警告,所以我在这里做了罗列 Semantic Warnings WarningMessage -WCFString-literal input conversion stopped due to an inpu...

3163

c++ 常量表达式

const expression 任何表达式都有一种属性,类型。常量表达式即是表达式的一种类型。常量表达式指这种表达式能够在编译时刻被计算。 这种表达式,能被用到non-type模板参数,array sizes, 和其他需要const expression的地方。 int n = 1; std::array a1; // error, n is not a constant expressi

nilbooy的博客 1753
上一篇: 使用PhotoShop与Matlab结合测试Shape Context Matching
下一篇: Aurora的公式转到MathType中需要注意的几点
visionfans
博客等级 码龄16年 141粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值