为了迭代数组,我们应该使用 size_t 还是 ptrdiff_t?

2023-12-05

In this 安德烈·卡尔波夫 (Andrey Karpov) 的博客文章标题为:"About size_t and ptrdiff_t"他举了一个例子,

for (ptrdiff_t i = 0; i < n; i++)
  a[i] = 0;

不过不知道对不对,好像应该是这样

for (size_t i = 0; i < n; i++)
  a[i] = 0;

它是否正确?

我知道我们也应该使用类似的东西memset,但让我们完全避免这种情况。我只问类型


In 一篇博文,我认为你应该始终避免分配大于PTRDIFF_MAX(*),因为这样做会使 Clang 和 GCC 等编译器生成无意义的代码,即使您没有以导致结果溢出的方式减去指向该块的指针。

(*) 即使malloc当你传递一个大于的值时成功PTRDIFF_MAX。问题的关键在于,GCC 和 Clang 只能生成在与此类链接时行为正确的代码。malloc,但是 Glibc 提供了malloc不实现此限制的函数。

如果您遵循该约束(我鼓励您这样做:这就是博客文章的信息),那么这两种类型都同样正确。

也就是说,由于只需要表示正偏移量,size_t在你的例子中将是自然的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为了迭代数组,我们应该使用 size_t 还是 ptrdiff_t? 的相关文章

  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • 如果两个线程同时访问同一个 bool 变量会发生什么?

    我有一个跨平台 C 程序 其中使用 boost 库创建异步计时器 我有一个全局变量 bool receivedInput false 一个线程等待并处理输入 string argStr while 1 getline cin argStr
  • C# 测试活动的互联网连接。 Ping google.com

    C 2008 我正在使用此代码来测试互联网连接 因为我的应用程序必须登录到网络服务器 但是 如果用户互联网连接失败或电缆被拔出 我必须通知用户 Ping www google com to check if the user has a i
  • 如何通知父线程所有子线程都已终止?

    我有一个控制台应用程序正在移植到 WPF 该应用程序有 3 个工作线程 在将一些输出结果打印到屏幕上之前 这些线程都连接到主线程 我的理解是 如果我尝试在 WPF 应用程序中执行相同的操作 GUI 将被阻止并且不会响应用户 那么如何通知父线
  • 为什么这个 oracle 批量插入不起作用?

    我正在尝试将一些数据批量插入到 oracle 数据库中 我按照文档中的示例进行操作 this DataBaseAccess new OracleConnection connString var dataAdapter new Oracle
  • WPF Dispatchertimer 延迟反应/冻结

    在我的 WPF 应用程序中 我使用 3 个不同的 DispatcherTimers 一种是用于显示当前时间 一种是每 5 秒运行一次数据库查询 第三个每 1 秒刷新一次自定义按钮的值 当我的程序运行时 有很多延迟 冻结 例如 时间开始正确计
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • boost::asio::io_service 是否保留处理程序的顺序?

    Does boost asio io service http www boost org doc libs release doc html boost asio reference io service html保证处理程序的调用顺序与
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • C 中的链表数组:初始化和插入?

    我需要创建一个链表数组 如图所示 这就是我到目前为止所做的 typedef struct Node int data struct Node next Node int main void Node link 5 for int q 0 q
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中
  • char[length]初始化并处理

    我定义了一个字符数组 char d 6 如果我在以下方面有误 请纠正我 此时没有为变量分配内存d 现在我要初始化它 d aaaaa 这种初始化之后 就不需要释放内存了 它将自动完成 我怎么知道是否char 被初始化了吗 我正在寻找类似的模式
  • 替换全局热键

    我有一个位于托盘中的应用程序 我想定义多个热键来触发我的程序中的事件 我从 AaronLS 在这个问题中的出色回答中找到了灵感 使用C 设置全局热键 https stackoverflow com a 27309185 3064934 如果
  • DataGridView 捕获用户行选择

    我在处理选择时遇到问题DataGridView 我的网格视图包含一个金额列 表单上有一个文本框 应显示所选网格视图行的总数 因此 我需要在用户选择 取消选择 gridview 行时捕获事件并相应地计算 添加 减去 金额 我找到了两种方法 使
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ

随机推荐

  • 当 Coq 中使用自己的可判定性时,评估计算不完整

    The Eval compute命令并不总是计算为简单表达式 考虑代码 Require Import Coq Lists List Require Import Coq Arith Peano dec Import ListNotation
  • 为什么用逗号进行双重初始化是非法的?

    我有三个代码片段 这个 1 7 yes that s all the code 编译没问题 这个 double d 1 7 也编译没问题 然而这个 double d 1 7 编译失败 gcc 4 3 4 说 错误 在数字常量之前预期有不合格
  • 调用 webapi 抛出 No Access-Control-Allow-Origin 标头出现在请求的资源上

    我正在尝试按照 Azure 示例通过此处提供的 WSFederation 将 Azure AD 集成到我的 MVC 4 6 Web 应用程序中https github com Azure Samples active directory d
  • Python 按值搜索

    我需要一个合适的解决方案来搜索 Python 嵌套数据结构中的键 假设我有一个带有值 check 的变量和这样的字典 SERVICES domain check whois register user create show delete
  • NoClassDefFoundError:com.opencsv.CSVWriter

    我尝试使用 opencsv libray 来获取加密格式数据 但在 CSV writer 上写入时 我收到 NoClassDefFoundError 我看过很多与相同错误相关的帖子 并尝试了几乎所有方法 但仍然无法纠正问题 下面的链接有同样
  • 现在如何使用 Blaze 在 Meteor 模板中的动态字段上使用 X-editable?

    I had x 可编辑在 Meteor 0 7 2 中工作 但自从升级到 0 8 0 后 它不再正确渲染 我往往会得到一堆空标签 这很令人沮丧 因为数据就在那里 只是在渲染函数被触发时还没有
  • 使服务层可以访问对象,而无需在 MVC4 应用程序中作为参数传递

    我正在构建一个多租户 MVC 应用程序 其中有一个应用程序池和一个数据库 我有一个租户表 并且我的每个模型都有一个标识的 TenantId 每个租户都有一个字符串 Url 用于标识用于访问该租户数据的完整 URL 我可以通过以下方式从 Ba
  • 如何对列表重新排序? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 给定一个任意大小的数组n 我想根据数组的离散索引重新组织数组的元素 Python 示例 Unique array of size n a b c d e
  • 对 Tkinter bind_class 感到困惑

    我定义了 GCanvas Canvas 的扩展 我的目的是在类级别绑定到 GCanvas 它不起作用 我还尝试绑定到 tk Canvas 但它也不起作用 绑定到root或 GCanvas 实例工作正常 这两种选择对我来说都没有用 但我只是尝
  • PowerShell:将 HTML 表提取为 CSV

    我正在尝试将 HTML 表提取到 CSV 文件 我对 PowerShell 了解不多 但在网上我找到了一些示例 但我总是收到相同的错误消息 您不能对空值表达式调用方法 行数 8 字符 1 table oHTML ParsedHtml bod
  • 使用重写规则从 url 中删除 .php

    我想重写 nginx 中的 url 以便 php扩展名可以省略 这就是我所拥有的 但这对我不起作用 有人知道如何做到这一点吗 Thanks server listen 80 server name example com return 30
  • 根据 3 个变量的颜色 - 麦克斯韦三角形

    我有一个由三个变量 u v w 组成的模型 它们随时间和空间而变化 我对这三个变量的比率特别感兴趣 但我宁愿只使用一张图 而不是显示三张图 每张图对应一个变量 我的想法是使用麦克斯韦三角形 颜色三角形 参见http homepages ab
  • ASP.NET Intranet 站点要求提供凭据 - Windows 身份验证

    我在 ASP Net 中创建了我的第一个网站 并且正在尝试在我们工作的 Intranet 上启动并运行它 我现在几乎已经完成了所有事情 但我遇到了障碍 我需要使用 Windows 身份验证 我的团队的要求 因此我完成了设置网站的过程 我已配
  • 对同一对象调用两次 MustHaveHappened 失败

    给定以下被测类 以及关联的 DTO 类和接口 public class Foo private readonly IBar bar public Foo IBar bar bar bar public void DoStuff var dt
  • 如何在项目中包含多个log4j2.xml文件?

    我的项目由多个模块组成 每个模块都可以独立运行并有单独的log4j2 xml 假设 Project X 由三个模块组成 模块 A 有 log4j2 xml 包含 Loggers 和 Appenders 模块 B 有 log4j2 xml 模
  • .vimrc 来源不正确

    我的 vimrc 中有以下几行 colorscheme solarized 这显然设置了日晒配色方案 我实际的 vimrc 肯定比这个长 并且我还指定了更多 Solarized 选项 但是 我面临的问题可以使用这个最小的 vimrc 文件来
  • Linux中DMA如何处理memcpy

    我在程序中使用 memcpy 不幸的是 当我增加变量数量时 CPU 使用率会增加 就好像 memcpy 是通过使用 for 循环迭代来运行的 linux 中也有快速的 memcpy 函数吗 我应该使用补丁并编译内核吗 在某些架构中 CPU
  • Bootstrap 突然不适用于我的 React JS 项目

    突然 引导程序停止了我的项目的工作 我不知道为什么 这是我们的 package json name blankets version 0 1 0 private true dependencies amazon cognito identi
  • 数据卡和U盘或U盘的区别

    我有一张沃达丰数据卡 可以插入 USB 端口 我有 XP 和 Vista 操作系统 并且我正在使用WM DEVICECHANGEWindows 事件 了解 USB 插入和拔出 它对我来说工作得很好 但我无法区分数据卡插入和笔驱动器插入 是否
  • 为了迭代数组,我们应该使用 size_t 还是 ptrdiff_t?

    In this 安德烈 卡尔波夫 Andrey Karpov 的博客文章标题为 About size t and ptrdiff t 他举了一个例子 for ptrdiff t i 0 i lt n i a i 0 不过不知道对不对 好像应