为什么我的数组长度突然无缘无故地改变了? [重复]

问题描述 投票:0回答:1
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吗?怎么会?

arrays c sizeof
1个回答
1
投票

a
f
不是数组,它们是指向通过
malloc(3)
.

分配的内存的指针

sizeof
指针返回指针的大小——在你的例子中似乎是 8 个字节——而不是指向的数据。

旁白:铸造

malloc(3)
家庭的回报是多余的,只会使代码混乱。这些函数返回一个通用的
void *
,它被隐式转换为任何其他指针类型。 (当 C 没有
void *
时需要强制转换,并且这些函数返回
char *

© www.soinside.com 2019 - 2024. All rights reserved.