【发布时间】:2017-04-27 14:03:02
【问题描述】:
我正在尝试编写一个 c 程序,它可以打印指向 malloc() 分配的内存位置的指针变量的大小。
我使用的C版本是C99。
下面是我的代码:
#include<stdio.h>
int main()
{
int *temp;
temp=malloc(sizeof(int)*3);
printf("%d %d\n",sizeof(int),sizeof(temp));
return 0;
}
我得到的输出是:
sh-4.2$ ./f1 4 8
根据代码, printf 应该为两个表达式打印相同的值。即 12. sizeof(int)=4.
因为我已经为 temp 分配了 12 字节的内存,所以 sizeof(temp) 应该返回 12。但是,它返回的值是 8。
我想知道可能是什么原因?有知道的请回答。
【问题讨论】:
-
printf("%d %d\n",sizeof(int),sizeof(temp));--->printf("%zu%zu\n",sizeof(int),sizeof(temp)); -
sizeof返回size_t,而不是int。您的代码调用了未定义的行为。 -
如果指针是一个数组,它将被称为“数组”,而不是“指针”。
-
@Lps:你能快速解释一下 %zu 的用途吗?
-
正如您在The Man 上看到的
z格式说明符意味着:以下整数转换对应于size_t或ssize_t参数。u代表对于未签名的