结构体和结构体第一个成员之间的指针别名[重复]

2023-12-23

C 中的指针别名通常是未定义的行为(因为严格别名),但 C11 标准似乎允许对指向结构的指针和指向结构的第一个成员的指针进行别名

C11 6.7.2.1 (15)...指向结构对象的指针...指向其初始成员...反之亦然...

那么下面的代码是否包含未定义的行为?

struct Foo {
    int x;
    int y;
};

// does foe return always 100?
int foe() {
    struct Foo foo = { .x = 10, .y = 20 }, *pfoo = &foo;
    int *px = (int*)pfoo; *px = 100;
    return pfoo->x;
}


这段代码是正确的。标准 C 和 C++ 的所有版本都允许这样做,尽管措辞有所不同。

不存在严格的别名问题,因为您访问的是 type 的对象int通过类型的左值int。当执行访问的左值与存储在内存位置的对象具有不同类型时,可能会应用严格的别名规则。

您引用的文本涵盖了指针强制转换实际上指向int object.

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

结构体和结构体第一个成员之间的指针别名[重复] 的相关文章

  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • 如何在另一个应用程序中挂钩 api 调用

    我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用 我知道我需要使用 GetProcAddress 来查找 gdi32 dll 中那些方法的地址 并用我的函数的地址覆盖我想要挂钩的进程中的地址
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t

随机推荐

  • 如何在 Windows 7 x64、python 2.7 上 pip 安装 pylzma

    我以为这应该是开箱即用的 但是 我已经粘贴了 pip logpastbin http pastebin com fnw0jeXD错误消息的最后几行是 e Program Files x86 Microsoft Visual Studio 9
  • 为什么要避免子类型化?

    我看到 Scala 社区中的许多人建议避免 像瘟疫一样 进行子类型化 反对使用子类型化的各种原因是什么 有哪些替代方案 类型决定了组合的粒度 即可扩展性 例如 一个接口 例如可比较 结合 从而合并 相等和关系运算符 因此不可能仅在等式或关系
  • Bash 中的数组交集[重复]

    这个问题在这里已经有答案了 如何在 Bash 中比较两个数组以找到所有相交的值 比方说 array1 包含值 1 和 2array2 包含值 2 和 3 结果我应该拿回2 我自己的回答 for item1 in array1 do for
  • 谷歌图表加载消息

    我有以下有效的脚本 但有一个恼人的问题
  • MongoDB 'count()' 非常慢。我们如何改进/解决它?

    我目前正在使用 MongoDB 来处理数百万条数据记录 我发现了一件非常烦人的事情 当我使用 count 函数进行少量查询数据收集时 速度非常快 然而 当查询的数据集合包含数千甚至数百万条数据记录时 整个系统变得非常缓慢 我确保已对所需字段
  • Mac OSX Lion/X11/CImg 库

    所以我正在尝试将 CImg 图像写入库合并到我的XCode项目 http cimg sourceforge net 但是 该库的头文件包含以下包含内容 并且 XCode 给出了此错误警告 include
  • 从 Github 导入 python 库

    我已经用 Python 编写了一些库以在我的项目中使用 我已将它们本地存储在我的系统上 也远程存储在 Github 上 现在每次我写一些代码时我都会使用sys path append 一开始帮助从系统中的目录导入我的库 我想知道是否有办法直
  • Twitter 状态 URL 正则表达式

    我有一个现有的正则表达式 http twitter com w status es d 我用它来确定 URL 是否是 Twitter 状态更新 URL 例如 http twitter com allWPthemes status 20404
  • 在 ASP.NET Core 5 中的 razor 视图中使用字形图标

    我正在将 ASP NET MVC 5 Web 应用程序迁移到 ASP NET Core 使用 NET 5 在以前的网络应用程序中 我使用了字形图标 但在新的应用程序中似乎没有可用的 我创建了一个新的ASP NET Core Web 应用程序
  • 如何在Eclipse控制台中获得回车而不换行效果?

    If I System out print something r 在控制台 我将光标返回到行首 最后在 System out print something r System out print any r I have anything
  • 使用双打时,为什么 (x / (y * z)) 与 (x / y / z) 不同? [复制]

    这个问题在这里已经有答案了 这部分是学术性的 因为就我的目的而言 我只需要四舍五入到小数点后两位 但我很想知道发生了什么会产生两个略有不同的结果 这是我编写的测试 旨在将其缩小为最简单的实现 Test public void shouldE
  • 在 VS 调试器中查看映射条目

    我想知道这是否是我的错误 误解 最有可能 或其他原因 我在 VS 2017 社区中有以下代码 include
  • 适用于 .NET 2.0 的类似 TPL 的库

    在 NET 4 0 中发现 Parallels 库后 我希望在我的 NET 2 0 应用程序中拥有类似的东西 NET 2 0 是否有任何并行编程帮助程序库可以简化常见任务 Threadpool http msdn microsoft com
  • 什么是 manifest.json 文件?在我的计算机上哪里可以找到它?

    我认为它适用于 chrome 我读到我可以在该文件中设置权限以避免开发时出现 XSS 错误 从原生 chrome json 文件到 chrome 扩展的 json 文件 有许多 json 文件可以满足您的 chrome 体验 其中大部分可以
  • iOS 多线程 - NSURLSession 和 UI 更新

    我有一个关于 iOS 多线程的一般问题 在我非常简单的测试应用程序中 我使用 NSURLSession 从服务器下载一些小图像并将它们呈现在表格视图中 在 NSURLSession 的回调中 检索图像后 我调用 tableview relo
  • 如何更改 CNContactPickerViewController 搜索栏的颜色

    我从视图控制器启动 CNContactPickerViewController 但如何更改其中搜索栏的文本颜色 导航栏是深蓝色的 在iOS11中默认搜索栏文本是黑色的 我更新了快速修复的方法 在呈现 CNContactPickerViewC
  • 具有调用私有方法的静态方法的 Ruby 类?

    我有一个包含许多静态方法的类 每个人都必须调用一个通用方法 但我试图不公开后一个方法 将其设置为私有将只允许从该类自己的实例进行访问 protected 似乎也不能解决这里的问题 如何隐藏 do calc 以免在静态上下文中被外部调用 使其
  • 从 php 调用 wordnet(PHP 的 Wordnet 类或 API)

    我正在尝试编写一个程序来查找两个文档之间的相似性 由于我只使用英语 所以我决定使用wordnet 但是我找不到将wordnet与php链接的方法 我无法从php找到任何wordnet api 我在论坛上看到有人说 Spudley 他从 ph
  • 如何在 Jest 中使用 axios 模拟 API 调用?

    我是测试新手 对使用 ES6 类模拟 API 和 axios 实例有一些疑问 我有一个index js import axios from axios export default class Pushkin constructor thi
  • 结构体和结构体第一个成员之间的指针别名[重复]

    这个问题在这里已经有答案了 C 中的指针别名通常是未定义的行为 因为严格别名 但 C11 标准似乎允许对指向结构的指针和指向结构的第一个成员的指针进行别名 C11 6 7 2 1 15 指向结构对象的指针 指向其初始成员 反之亦然 那么下面