当前位置: 首页 > 知识库问答 >
问题:

的行为

帅煌
2023-03-14

我有一个关于地址操作符后面跟一个解引用操作符的行为的问题。

让我们看看表达式

C11标准(第6.5.3.2节)规定:

一元的

带有脚注:

因此

很明显

如果我们现在考虑一个类型 int[10],那么什么类型是

一方面,如果我们评估

在另一边if

一个简短的例子表明,gcc对待表达式的方式不同:

#include <stdio.h>

int main(void)
{
    int a[10];

    printf("%zu\n%zu\n", sizeof a, sizeof &*a);

    return 0;
}

输出:

40
8

这是否符合C11标准?

也许是因为“对操作符的约束仍然适用”,而解引用操作符的操作数必须是指针?


共有1个答案

狄雅珺
2023-03-14

考虑到从数组到指向第一个元素的指针的转换分别发生在*应用之前。尽管直到C实现确定它是sizeof还是的操作数,才决定是否将数组转换为指针

此外,对< code>*运算符的操作数的一个约束是,它应该具有指针类型(C 2018 6.5.3.2 2)。因此,操作数必须是指针,而不是数组。

“结果就像两个都被忽略了一样”这句话促使我们考虑如果两个都忽略了,结果会是什么,但正文接着说“除了运算符上的约束仍然适用,结果不是左值”。由于约束仍然存在,操作数必须是指针;可以应用约束,但操作数可能是尚未转换为指针的数组,这在逻辑上是不一致的。

 类似资料:
  • 问题内容: 下面的小提琴有三个方块。 块1 包含三列。中间的列中有两行,每行设置为flex:1。 块2 包含三列。中间的列中有两行,每行设置为flex:1。第二行包含一条狗的图像。图像将不会缩小到包含图像的行的高度。 块3 仅包含中间的列,中间有两行,每行设置为flex:1。第二行包含一条狗的图像。图像确实缩小到包含图像的行的高度。 问题是,为什么块2中间列的第二行中的图像不缩小到包含该行的行的高

  • 其中一个测试通过,另一个给出以下错误: java.lang.ClassCastException:类org.springframework.http.ResponseEntity不能强制转换为类org.junit.jupiter.api.function.executable(org.springframework.http.ResponseEntity和org.junit.jupiter.api

  • 我正在使用Mapstruct映射将一个POJO转换为另一个POJO模型 以下是mapstruct自动生成的方法 该方法基本上获取源POJO的映射,并将其转换为目标模型的映射。生成正在通过。 当我运行代码时,我在这个方法中得到了ClassCast异常:HeaderAttributeGenericDataTypeMaptoStringEnergiectAttributeDataMap 堆栈跟踪: 我还

  • 我已经简化了下面的代码在更新的表视图。 由于某些原因,我没有像人们所期望的那样使用JavaFx的属性,也许这种行为与此有关。来自JTable和observer模式,我想尝试如何在javafx中实现这一点。然而,我的表格数据都很好,但当我试图改变背景颜色时,更多的行出现在表格范围之外。我已经检查了可观察列表的大小,结果与预期一致。 我无法真正看到或理解datas.set是如何产生这种行为的,这是我在

  • 我一直在研究加密密码的最佳方法,我决定继续使用BCRYPT,只是因为每次加密的成本和它通常被认为是目前最好的加密方法之一。 我使用的是双向盐,所以每个用户都有一个独特的盐,然后显然盐存储在我的应用程序中,我注意到一些相当奇怪的行为…根据PHP文档,这种行为是正常的吗? 不管怎样,下面是我使用的代码: 现在,Crypto类: 所以,我感兴趣的是,为什么这个函数只是在输出字符串的开头添加选项中的sal

  • 问题内容: 说我有身份证。我将如何获得下一行或上一行? 问题答案: 这就是我用来查找上一个/下一个记录的方法。表格中的任何列都可以用作排序列,并且不需要联接或讨厌的技巧: 下一条记录(日期大于当前记录): 上一个记录(日期小于当前记录): 例: