【发布时间】:2017-06-26 23:08:54
【问题描述】:
const char *array[] = {"ax","bo","cf"};
试过了
printf("size of array = %lu\n", sizeof(const char*));
result != 3
还有
printf("size of array = %lu\n", sizeof(array));
result != **DESIRED ANSWER** = 4
注意...我在这里阅读了相关问题,但没有一个与我的问题有关......
【问题讨论】:
-
好奇:是什么让你认为 sizeof(const char*) 是 3?根据您的架构,如果它是 32 位,它将返回 4,64 位将返回 8。sizeof(array) 将返回 3*sizeof(pointer)。为什么你认为它应该返回 4?
-
请注意,限定指针(
const、volatile)的大小与非限定指针的大小相同。 -
@JonathanLeffler 当心,在特定平台上,并且取决于(可能是非标准的)编译器,这不可能是真的。
const限定符可以使指针指向文本 (eprom),因此使用与普通 ram 不同的访问方式,有时使用不同大小的指针。 -
C 标准另有规定。当然,没有控制非标准编译器做什么,但 C 标准说(§6.2.5 类型)¶26 到目前为止提到的任何类型都是非限定类型。每个非限定类型都有其类型的多个限定版本,对应于
const、volatile和restrict限定符中的一个、两个或所有三个的组合。类型的合格或不合格版本是属于同一类型类别并具有相同表示和对齐要求的不同类型。 -
上一引文末尾引用的脚注 48 说:相同的表示和对齐要求意味着可互换作为函数的参数、函数的返回值和联合成员。