C 数组可以在元素之间包含填充吗?

2023-11-25

我听说有传言说,在 C 中,包含在结构内部的数组可能在数组元素之间添加了填充。现在显然,任何一对元素之间的填充量都不能变化,或者使用简单的指针算术不可能计算数组中的下一个元素。

该谣言还指出,不包含在结构中的数组保证不包含填充。我至少知道那部分是真的。

因此,在代码中,谣言是:

{
    // Given this:
    struct { int values[20]; } foo;
    int values[20];

    // This may be true:
    sizeof(values) != sizeof(foo.values);
}

我很确定sizeof(values)将永远相等sizeof(foo.values)。然而,我在 C 标准(特别是 C99)中找不到任何明确证实或否认这一点的内容。

有谁知道这个谣言是否在任何 C 标准中得到解决?

edit:我知道数组末尾之间可能有填充foo.values和结构的末尾foo并且该标准规定在开始之间不会有填充foo和开始foo.values。然而,有没有人有一个引用自 or 参考该标准表示元素之间没有填充foo.values?


不,数组元素之间永远不会有填充。这是明确不允许的。 C99 标准将数组类型称为“数组类型描述了连续分配的非空对象集...”。相比之下,结构是“顺序”分配的,而不是“连续”分配的。

结构中的数组之前或之后可能有填充;那完全是另一种动物。编译器可能会这样做以帮助结构对齐,但 C 标准对此没有任何说明。

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

C 数组可以在元素之间包含填充吗? 的相关文章

  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • Facebook 分享按钮和自定义文本[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有没有办法让 Facebook 分享按钮在墙上或新闻提要上发布自定义文本 我们使用这样的东西 在一行中使用 a title send to Facebook href http
  • 简单的 Java HTTPS 服务器

    我需要为 Java 应用程序设置一个真正轻量级的 HTTPS 服务器 它是我们的开发实验室中使用的一个模拟器 用于模拟一台设备在野外接受的 HTTPS 连接 因为它纯粹是一个轻量级开发工具 根本不以任何方式用于生产 所以我很高兴能够绕过认证
  • 强制编译器选择以 const T& 作为参数的复制构造函数

    我正在编写一个类 其中有模板化构造函数和复制构造函数 每次我想使用非常量对象调用复制构造函数时 都会选择模板化构造函数 如何强制编译器选择复制构造函数 这是 mcve include
  • gcc/g++:“没有这样的文件或目录”

    g 给我以下形式的错误 foo cc
  • 使用 select 清除 angularJS 中的过滤器

    我在下面给出的 HTML 中使用 ngOptions 指令
  • 如何在 Spring boot 嵌入式 tomcat 中设置 HTTPS SSL Cipher Suite Preference

    我正在尝试根据服务器首选项设置 HTTPS SSL 密码套件首选项 而不是根据客户端和服务器支持的具有最高强度的通用密码套件自动选择 我想让服务器选择具有 TLS ECDHE 的服务器和客户端之间的共同点 以支持前向保密 我已经在 www
  • 删除所有以某个单词开头的 NSUserDefaults

    有没有办法让我 遍历 所有的列表NSUserDefault在我的 iPhone 应用程序中 只删除某些内容 例如 我想获取以某个单词开头的所有键名称 像这样的东西 NSUserDefaults standardUserDefaults re
  • 如何计算方向轴?

    之前 我根据解剖结构 例如爪子的脚趾 计算了方向轴 但我发现 当我无法很好地区分脚趾或者 脚跟 蓝色方块 偏离得很远时 这不起作用 所以我决定寻找更好的替代方案并决定尝试计算惯性轴 此页面很好地解释了如何计算它 但我很难理解从质心 或我的例
  • Numpy 中的块运算

    是否有任何方便的实用程序可以在 Numpy 数组上进行块操作 我正在考虑像 Ising 自旋重整化这样的操作 将矩阵划分为块并返回矩阵 其中每个块被其总和 平均值或其他函数替换 您可能正在寻找超级蝙蝠鱼的blockwise view 这使用
  • Android Google Places API,getAutocompletePredictions 返回状态“PLACES_API_ACCESS_NOT_CONFIGURED”

    我在使用 Android Google Places API 自动完成功能时遇到问题 我使用与 Android Google Maps API 相同的密钥 在文档中 写的是这样可以 这是我在清单中的定义
  • Matlab filter() 与 SciPy lfilter()

    根据他们的文档Matlab滤波器 and SciPylfilter 看起来他们应该是 兼容 的 然而我有一个问题 在Python中移植更大的Matlab代码 为此我得到了ValueError object of too small dept
  • 发布网站不会更新我的 CSS 包

    当我在发布模式下从 Visual Studio 运行代码并检查捆绑的样式表时 我可以看到对该捆绑中的 css 文件的更新 但是 当我将网站发布到服务器或本地计算机时 我对样式表的更改尚未生效 捆绑的样式表仍然是旧的样式表 我尝试过重置 II
  • 如何修复 ('throw er; // Unhandled 'error' event') 代码生命周期?

    我尝试创建一个 React 应用程序 我用的是命令提示符但是在创建应用程序后 当我尝试启动 npm 时 它给了我一些错误 我也尝试在 WebStorm IntelliJ 和 Visual Studio Code PowerShell 中创建
  • 角度动画在 IE Edge 中不起作用

    我在 Angular 中向我的组件添加了一个动画 然而 动画在 Chrome 和 Firefox 中工作正常 但在 IE Edge 中 尽管样式在状态更改时正确应用 但动画并未触发 但只是没有指定动画 有人有同样的问题吗 这是我的代码 an
  • 启动 Android Studio 时出错:无法创建 JVM:错误代码-6

    我安装了Android Studio并且运行正常 但因为它有点慢 所以我按照网站上的说明进行操作 Android Studio 速度慢时怎么办尽管我尝试卸载并重新安装 AS 以及 Java 但它使我无法重新打开 android studio
  • 此 jar 包含其签名者证书将在六个月内过期的条目

    我已经以各种方式对我的 jar 进行了签名 但是当我使用以下命令时 我不断收到上述错误消息 jarsigner verify verbose my jar 有没有办法消除这个错误 如果没有重新认证 我的代码会在六个月后停止工作吗 以下是用于
  • 从购物车页面删除 Woocommerce 购物车数量选择器

    我正在尝试从购物车页面删除 Woocommerce 购物车数量选择器 我正在商店存档页面上使用数量输入字段 并将其应用到购物车页面 我怎样才能删除它并且不允许用户更改它 我已尝试使用下面的代码进行以下操作 并从官方 Woocommerce
  • 在 Makefile 中找不到指向的库文件

    我正在尝试编译这个工具 下面是其 Makefile 的开头 CC gcc CFLAGS Wall O2 D TRACES DFLAGS g Wall o0 CPPFLAGS INCLUDES I LDFLAGS LIBRARIES L LD
  • 在 appsettings.json (asp.net core 本地化)中设置文化和 ui-culture?

    我有 asp net core 应用程序 我想要本地化和翻译 v 1 1 0 我希望源代码支持英语和挪威语部署 我发现这可能是一个startup cs配置 RequestLocalizationOptions localizationOpt
  • C 数组可以在元素之间包含填充吗?

    我听说有传言说 在 C 中 包含在结构内部的数组可能在数组元素之间添加了填充 现在显然 任何一对元素之间的填充量都不能变化 或者使用简单的指针算术不可能计算数组中的下一个元素 该谣言还指出 不包含在结构中的数组保证不包含填充 我至少知道那部