- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我只知道一个案例 当数组传递给函数时,它们会衰减为指针。任何人都可以详细说明数组衰减为指针的所有情况。
最佳答案
C 2011 6.3.2.1 3:
Except when it is the operand of the sizeof operator,… or the unary & operator, or is a string literal used to initialize an array, an expression that has type “array of type” is converted to an expression with type “pointer to type” that points to the initial element of the array object and is not an lvalue.
换句话说,数组通常退化为指针。该标准列出了它们不的情况。
有人可能会认为,当您将数组与下标一起使用时,数组就充当了数组的角色,例如 a[3]
。然而,这里发生的实际上是:
a
被转换为指针。a[3]
被评估为 *((a)+(3))
。也就是说,a
被转换为一个指针,将3加到指针上,并应用*****运算符。)注意:C 2011 文本包括“_Alignof 运算符”。这在标准的 C 2018 版本中得到了纠正,我已从上面的引用中删除了它。 _Alignof
的操作数始终是一个类型;您实际上不能将其应用于对象。因此,C 2011 标准将其包含在 6.3.2.1 3 中是一个错误。
关于c - 什么情况下数组会衰减为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569070/
liwen01 2024.08.18 前言 无论是在产品开发还是在日常生活中,在使用无线网络的时候,都会经常遇到一些信号不好的问题,也会产生不少疑问: 为什么我们在高速移动的高铁上网络会变
我正在使用 Kinect 获取每个关节的位置和方向,然后将它们发送到 Unity。我注意到值有很多“跳跃”或波动,例如,有时我不移动我的手,而在 Unity 中它会旋转 180 度。 我想要的是一个平
在下面的示例中, #include #include //okay: // template decltype(auto) runner(T&& t, F f) { return f(st
出于某种原因,即使我设置了衰减因子,我的学习率似乎也没有改变。我添加了一个回调来查看学习率,它似乎在每个纪元之后都是一样的。为什么没有变化 class LearningRatePrinter(Call
考虑下面的代码: #include #include using namespace std; template void Test2(future f, Work w) { async([
我是一名优秀的程序员,十分优秀!