【发布时间】:2013-09-23 16:12:59
【问题描述】:
在下面的 sn-p 中,指针地址和值被引用为类型size_t。
然而,正如标题所说,最后的减法对我来说没有意义。它的作用就像是减去乘以 8 的数字,而不是在 int array 中看到的实际值。
#include <stdio.h>
#include <stdint.h>
int main()
{
int i[6] = {2, 0, 1, 0, 20, 24};
void *ptr = &i[2];
printf("%zu\n", ((size_t*)ptr));
printf("%zu\n", *((size_t*)ptr));
printf("%zu\n", ((size_t*)ptr) - *((size_t*)ptr));
}
【问题讨论】:
-
%zu是什么类型的说明符?对我的编译器发出警告:Unknown conversion type character 'z' in format. -
@hacks 这是
size_t的正确转换说明符。 -
@hacks
z是整数格式的修饰符,表示整数参数的预期类型是size_t。恕我直言,这里没有正确使用。 (C11 7.21.6.1 7) -
@Jimbo 这不是 GNU 扩展,而是标准说明符,存在于 C99 及更高版本中。
-
@chux 完全正确,它(ab)用于
size_t *,而它期望size_t。
标签: c pointers types type-conversion