【发布时间】:2018-03-29 01:45:30
【问题描述】:
我很好奇sizeof(arrayName + offset)。它给了我sizeof(pointer)。尽管数组名实际上是 C 中的一个常量指针,sizeof(arrayName) 给出了数组的大小(以字节为单位)。所以我猜编译器将(arrayName+offset) 视为纯指针,即使对于sizeof() 也是如此,因此使用数组名称时唯一的例外是sizeof(arrayName)。
这种行为sizeof(arrayName + offset) 是否由编译器明确定义?我正在使用 MinGW 32 位编译器。
除了使用像(sizeof(arrayName) - offset*sizeof(arrayName[0])) 这样的简单数学之外,还有什么方法可以知道部分数组的大小?
sizeof(arrayName) 不是 C/C++ 中不一致的语言结构吗?对于所有其他目的,arrayName 被视为地址。当我们将数组传递给函数时,这种行为可能会导致错误,初学者总是对此有疑问。
【问题讨论】:
-
arrayName + offset导致arrayName降级为指针,所以是的,这是明确定义的。是的,数组降级为指针的这种行为让初学者感到困惑;当你建造你的时间机器时,我建议在 1969 年左右拜访丹尼斯·里奇,并告诉他不要这样做。 :-) -
"数组名实际上是 C 中的常量指针" - 否