c语言如何使用动态分配内存的方法定义指针,并且可以用sizeof计算出数组长度?

malloc分配出*a的大小,但是如果使用sizeof(a)/sizeof(a[0])的到的结果并不对,那么如何使用动态分配内存的方法并且可以将数组长度计算出来?

内存动态分配时必须确定大小,既然大小已确定,还要sizeof(a);有何意义?再者sizeof操作符计算的是()中的变量或类型所占有的内存数,a就是个指针,一般是4字节,所以sizeof(a)的值是4而不是malloc分配成功的那么多字节。这里有个概念要弄清楚了就不会有纠结了,那就是a=(int *)malloc();这样的操作意思并百把malloc()分配的内存大小赋给a,而是“分配一块内存不准别人用,而把这块内存的首地址强制为malloc前()中的类型赋给a,之后可以通过a操作这一块内存而已。追问

那如果要确定数组的大小,可以使用sizeof(a)/sizeof(a[0])吗,这样得出的结果会是初始化时定义的数组大小吗?如果是的话,sizeof(a)/sizeof(a[0])应该怎么使用?

追答

我已经说过了sizeof(a)==4,而sizeof(a[0])若a[0]是int型的话也是4,所以sizeof(a)/sizeof(a[0])的结果就是1,得不到a的大小。a指向的空间的大小事先必须是知道的,要不然怎么malloc? 只有a是数组名的情况下sizeof(a)/sizeof(a[0])才能测出数组a有多少个元素,但这又有什么意义?有多少元素,定义数组时就知道,sizeof(a)/sizeof(a[0])又测不出a中实际有多少元素,还是需要程序员控制!

温馨提示:答案为网友推荐,仅供参考
相似回答