gpt4 book ai didi

c - 这是否违反了严格的别名规则?

转载 作者:行者123 更新时间:2023-12-04 20:26:39 24 4
gpt4 key购买 nike

灵感来自我对最近帖子的评论:C get element on place without parenthesis ,我想知道以下代码是否违反了严格的别名规则:

#include <stdio.h>

int main(void)
{
int num[3] = { 1, 2, 3 };

printf("num[1] = %d\n", *(int *)((char *)num + sizeof(int)));

return 0;
}

我知道取消引用类型转换为除 char 以外的其他类型的指针。是违规的,但在这里,原始指针的类型是 int * .它在被强制转换为 char * 后被取消引用然后到 int * .

这是否违反了严格的别名规则?

最佳答案

报价C11 , 章§6.5p7

An object shall have its stored value accessed only by an lvalue expression that has one of the following types:

  1. a type compatible with the effective type of the object


报价 C11 , 章 §6.5p6

The effective type of an object for an access to its stored value is the declared type of the object, if any....


重点我的
这里是 num指向的对象的有效类型确实是 int因此可以使用指向 int 的指针取消引用它.

关于c - 这是否违反了严格的别名规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com