如你所知,C 和 C 中 for 句子的语法是:
????for ( init-clause ; 条件表达式 ; 迭代表达式 )
地点:
一切都是可选的;假如省略了condition-expr,好像是1,所以:
for (;;) { // 永远 // ... }
永恒循环(可能是通过break)、return、goto、exit()、longjmp()、abort()退出之一,或在C 中是throw)。
C 也有基于范围的 for 循环,但那是另一个故事。
最初,init-clause只能是一个句子或表达式;从 C99 一开始,它也可以是一个声明:
for ( 无符号 i = 0; i <p>这很好,因为它限制了循环体中声明的变量范围。还可以声明多个变量:<br></p> <pre class="brush:php;toolbar:false">for ( 无符号 i = 0, j = 0; i <blockquote> <p>迭代表达式<em> 多个子表达式可以用逗号运算符计算。 (实际上,</em>任何<em>逗号运算符可用于表达式计算多个子表达式。 (实际上,</em>任何<em>逗号运算符可以用来计算表达式的多个子表达式。)</em> </p> </blockquote>但是如果你想声明多种类型的不同变量呢?你不能。相反,您被迫在循环外声明不同类型的变量:<p> <br></p>size_t i = 0; for (node_t *p = list->head; p->data; i, p = p->next ) { <pre class="brush:php;toolbar:false">
即使是像 C 虽然我已经用了这样一种相对较小的语言来学习新技术,但我仍然在学习新技术 C 超过 35 年了。事实证明,你
可以在init-clause声明多种类型的不同变量.
伎俩诀窍是使用本地匿名结构:
for ( struct { size_t i; node_t *p; } 循环 = { 0, list->head }; 循环.p->数据; loop.i,loop.p =loop.p->下一个 ) {
当然,你可以把循环命名为你想要的任何名字; iter 或者 it 都是合理的选择。
当然,它看起来很奇怪,引用循环有点丑——但你可以做到。它可能更有用的是,如果循环是宏的一部分,丑陋的地方就会被隐藏起来。
但仅仅因为你能做到,你就应该这是有争议的。毕竟,在循环之外声明不同类型的变量并不那么可怕。 这是权衡所有变量限制在循环范围内的重要性。 在 C 这通常在语言中并不那么重要。 然而,在 C 在中间,如果至少一个循环变量属于具有分析函数的类型,并且在循环终止后立即运行,则可能证明结构的使用是合理的。 当然,C 结构化绑定可替代:
for ( auto [i, p] = std::make_tuple( 0, list->head );
p->数据; i, p = p->下一个 ) {
结论
以上就是“for“在循环初始化子句中声明多个变量的详细内容,请关注其他相关文章!
远程主机端口扫描:安全检测,一键掌控
在“for在循环初始化子句中声明多个变量-C
亦豹远程控制:掌控未来,从此刻开始!
表格数据迁移难题:无法直接复制粘贴
免费 .NET 训练营和招聘机会-C
香港云服务器搭建:高效稳定,首选之选!
冰云互联,卓越云服务,企业首选伙伴!
免费 .NET 训练营和招聘机会-C
C程序计算数字-C
华为仓颉预览版试用申请已超过 1.1 万人,ACM 主席说“中国正在逐渐出现在编程语言领域”——IT行业
国内首个 HPC 源码仓库“源码之家”推出国家超算互联网平台,涵盖IT行业4000多种源码商品
智加科技论文DualBEV入选电脑视觉顶会ECCV-人工智能
网友推测一家是华为,据报道,两家大厂开发了“三折叠屏”手机-IT行业
全尺寸通用人形机器人青龙出现在WAIC,加速进入特定的智能时代——人工智能
主要家用,小米曝光第三款车型是增程 SUV,2026 年上市-IT行业
昨晚,今天早上,科技 0709:中国移动回应资费升级容易降级,2025年 比亚迪海豚纯电动汽车上市,小米正式宣布 MIX Fold 4 / Flip 折叠屏手机本月发布-IT行业
深光图像新突破:第一个全画幅自动对焦镜头即将发布-IT行业
阿里云推广:新老共享云服务器 99 元 / 年-IT业界
奇幻动作片《异人之下》发布了《争夺身体源流》版预告片,7 月 26 IT行业日上映