char *c = (char *)malloc(30*sizeof(char));
printf("%lu \n",sizeof(c));
在上面的代码中,我试图打印'c'的大小。无论我在代码中给出的是什么数字而不是'30',我都将sizeof(c)设为8。
有什么问题?如何确定数组的大小?
数组的长度和大小是否相同?
答案 0 :(得分:8)
此刻,您要求64位机器上的指针大小为8字节。由于这是malloc
而不是真实数组,因此您无法检索通过c
分配的缓冲区的大小。
如果c
被声明为
char c[30];
您可以使用
确定尺寸size_t size = sizeof(c)/sizeof(c[0])
但说实话,如果我必须这样做,我只会#define
数组大小,即使在编译时会删除大小计算。在我看来,它使代码更清晰。
答案 1 :(得分:2)
您正在打印系统中的(char *)大小为8。 如果你想知道后者的内存量是什么,那么你必须将它存储在某个地方。在您的情况下,您应该存储' 30'如果您将需要它,以备将来使用。
答案 2 :(得分:1)
sizeof(c)
表示给我变量c
的大小。由于c
是一个指针,它会返回指针在内存中占用的字节数。您看到的事实8表明您正在编译64位。在一个32位的内置它将是4。
记住你分配的东西的大小是你的工作。毕竟,你要求一些内存,所以你知道你分配了多少!在您的情况下,size_t size = 30*sizeof(char)
会为您提供已分配的金额。
答案 3 :(得分:0)
sizeof
是一个运算符,而不是一个函数,因此编译器创建的代码类似于sizeof(char *)
,而char的指针(当然取决于架构)是8个字节。 / p>
答案 4 :(得分:0)
实际上sizeof(* c)将返回1. mallocced缓冲区的大小无法确定编译时间(这与sizeof有关)。
答案 5 :(得分:0)
你得到变量c的大小,而不是它指向的内存区域的大小。没有办法获得函数内任何数组/结构对象的大小,因为它总是衰减到指针。您必须自己存储尺寸。如果您已将大小传递给malloc
,那么为什么不能将该大小存储到变量?