为什么“for”循环条件失败? [复制]

2024-01-12

在下面所示的代码中,没有打印任何内容,这意味着for循环失败。可能是什么原因?

我想知道因为当我打印时TOTAL_ELEMENTS单独地,它给出5,所以自然这一定是5-2=3 => -1<=3,所以它应该打印一些东西。

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

int array[] = { 23, 34, 12, 17, 204, 99, 16 };
int main()
{
    int d;

    for (d = -1; d <= (TOTAL_ELEMENTS - 2); d++) {
        printf("%d\n", array[d + 1]);
    }

    return 0;
}

有人可以解释一下这段代码吗?


这是“通常算术转换”的结果。

来自第 6.3.1.8 节C标准 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf:

如果两个操作数具有相同的类型,则无需进一步转换 需要。

否则,如果两个操作数都具有有符号整数类型或都具有 无符号整数类型,类型较小的操作数 整数转换rank 转换为操作数的类型 具有更高的等级。

否则,如果具有无符号整数类型的操作数有 等级大于或等于其他类型的等级 操作数,则有符号整数类型的操作数为 转换为无符号整数操作数类型 类型。

否则,如果操作数的类型为有符号整数类型可以 用无符号表示操作数类型的所有值 整数类型,则无符号整数类型的操作数为 转换为有符号整数类型的操作数类型。

否则,两个操作数都转换为无符号 整数类型对应有符号操作数的类型 整数类型。

The sizeof运算符返回一个size_t,这是一个无符号值。所以(sizeof(array) / sizeof(array[0])) - 2也未签名。

由于您正在比较有符号值和无符号值,因此有符号值将转换为无符号值。将 -1 转换为无符号会产生最大的无符号值,这会导致比较结果为 false。

如果您将右手边投射到int,它将按预期工作。

for(d=-1;d <= (int)(TOTAL_ELEMENTS-2);d++)

Output:

23
34
12
17
204
99
16

或者,您可以通过标准化数组索引方式来避免该问题:

for (d = 0; d < TOTAL_ELEMENTS; d++) {
    printf("%d\n", array[d]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“for”循环条件失败? [复制] 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何检查 jq 中的 null 或空并在 jq 转换中替换空字符串

    如何检查 jq 中的 null 或空并在 jq 转换中替换空字符串 下面的 JSON 示例 这是 JQ JQ amazon items select name contains shoes as item activeItem amazon
  • Eclipse 4 RCP(又名 E4)文档

    除了 Vogella 的教程和他的书之外至少还有什么吗 这完全是基于那些言论 他的存储库中的示例通常要么不完整 未完成 无法运行 这些示例甚至与实际的书不匹配 我想为此至少找到一些javadoc 因为任何一步到了一边 我就完全迷失了如何完成
  • 使用python ctypes与nvapi交互(后续附演示代码)

    这是我之前问题的后续 有关 python ctypes 和 nvapi 的帮助 https stackoverflow com questions 6163770 help with python ctypes and nvapi 我正在发
  • 运行存储在 OneDrive 上的 php 文件

    我正在开发一个 php 项目 将项目文件存储在 OneDrive 上 以便我可以从任何地方访问它们 我已经设置了 XAMPP 带有VirtualHost指向 OneDrive 中的项目文件夹 以便我可以在浏览器中运行它 直到昨天 此功能一直
  • 向 asp.NET RadioButton 控件添加自定义属性

    我想向名为的 asp net RadioButton 添加一个自定义属性Key我正在使用客户端进行 ajax 请求 我发现我的 aspx 标记如下
  • 赋值运算符 String 对象

    我是JAVA编程新手 我在我的书上读过 String a Hello String b Hello System out println a b 这应该返回false因为 a 和 b 引用 String 对象的不同实例 因为赋值运算符比较对
  • NetBeans IDE 7.2.1 无法访问 java.lang 致命错误:无法在类路径或 bootclasspath 中找到包 java.lang

    我需要有关 NetBeans 内的 android 项目的帮助 我刚刚打开在 NetBeans 中创建的项目 但遇到一些问题 无法访问 java lang 致命错误 无法在类路径或 bootclasspath 中找到包 java lang
  • C++ LibVLC 从帧/图像创建流

    我想使用 LibVLC 从图像创建视频 目前我还没有使用 LibVLC 的经验 我已经实施了一个像这里这样的测试项目 使用 libvlc 播放 mp3 的简单 C 程序 https stackoverflow com questions 1
  • Google Chrome 自动填充背景颜色在版本 72.0 中是否已更改?

    我最近注意到 在 Google Chrome 中 所有自动填充值的输入元素都显示蓝色背景 是的 Google 将自动填充预览的背景颜色更改为GoogleBlue50 您可以在这里找到问题 https bugs chromium org p
  • 如何使用表值参数插入多行,然后返回它们的 ID?

    在我的应用程序中 我需要将大量 100 行插入到数据库中 将它们插入数据库后 我需要插入它们的子项 这些子项具有指向子项的外键引用 我想知道是否有一种方法可以编写一个存储过程来插入所有这些行并将它们的 ID 返回到我的应用程序 您已使用表值
  • 向 JavaFX 2.2 添加其他视频编解码器/DVD 支持

    更新 由于 JFX 的媒体端已经开源 我自己对此进行了研究 这确实是可能的 但需要更改和重建 JFX 源 Java 和 C 部分 描述了该过程here http berry120 blogspot co uk 2014 03 expandi
  • TortoiseGit Log Graph 中分支线上的方形图标是什么意思?

    我在 TortoiseGit 日志图表的分支线上有方形和圆形图标 方形图标的含义是什么 Square 合并提交 回合 承诺
  • 如何将twitter、facebook集成到iPhone应用程序中?

    我想将 facebook twitter flickr 放入我的 iPhone 应用程序中 以便用户可以轻松登录并从我的应用程序发布消息 把问题放在这里就是为了得到一些线索或者现有的作品来达到这个目的 经过搜索 我在这里找到了一些相关作品h
  • 导入与命名空间同名的类

    我正在使用带有单独 types 定义的第三方库 如下所示 declare namespace Foo declare class Foo export Foo 如何在我的代码中导入 Foo 类 另外 这种奇怪的名称重复在 Typescrip
  • 查看 Visual Studio 中数据流 SSIS 元素的完整工具提示错误消息

    当我将光标悬停在 SSIS 数据流图中的一个元素上时 工具提示中会显示错误 Where我可以看到全文这个的错误信息 显示此工具提示的元素是标记为 规格 的元素 我正在使用 Microsoft Visual Studio 2008 The m
  • 插入初始数据JPA

    是否可以在我的数据库中加载初始数据 我正在使用 JPA 并使用 删除并创建 策略 这样每次我想测试我的应用程序时 数据库都会首先被清除 我将不得不重新创建所有内容 我知道在其他语言中 Php gt Doctrine datafixtures
  • JPA 使用 ElementCollection 映射多行

    我正在尝试遵循JPA教程 http en wikibooks org wiki Java Persistence ElementCollection并使用ElementCollection记录员工电话号码 PHONE table OWNER
  • 将 python 请求与 javascript 页面结合使用

    我正在尝试将 Requests 框架与 python 一起使用 http docs python requests org en latest http docs python requests org en latest 但是我试图访问的
  • CanvasRenderingContext2D 中的透明度组

    有没有一种方法可以将多个绘制操作组合到 2d 画布渲染上下文中 从而使它们各自独立combined结果被组合到画布的先前内容上 而不是每个绘图操作都由其本身组合 一个应用程序 我想绘制一条带有箭头的半透明线 并且我想避免线和箭头重叠的那些区
  • 为什么“for”循环条件失败? [复制]

    这个问题在这里已经有答案了 在下面所示的代码中 没有打印任何内容 这意味着for循环失败 可能是什么原因 我想知道因为当我打印时TOTAL ELEMENTS单独地 它给出5 所以自然这一定是5 2 3 gt 1 lt 3 所以它应该打印一些