printf("m=%d,M=%d,float_size=%d\n", m, M, floatsize);
a = (float*)malloc(floatsize * m * M);
f = (float*)malloc(floatsize * M);
printf("bytes of a is %d, bytes of f is %d\n", sizeof(a), sizeof(f));
结果是:
m=1,M=3,float_size=4
bytes of a is 8, bytes of f is 8
如下图截图:
不应该是3*4=12而不是8吗?怎么会?
a
和 f
不是数组,它们是指向通过 malloc(3)
. 分配的内存的指针
sizeof
指针返回指针的大小——在你的例子中似乎是 8 个字节——而不是指向的数据。
旁白:铸造
malloc(3)
家庭的回报是多余的,只会使代码混乱。这些函数返回一个通用的void *
,它被隐式转换为任何其他指针类型。 (当 C 没有 void *
时需要强制转换,并且这些函数返回 char *
)