动态内存分配问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:44:19
p=(int *)malloc(2);
现在指针p指向了这个两个字节的存储空间,根据p的类型我可以知道p所指向的对象是int型,则可以得出这个存储空间也是int型,但用malloc()函数分配时并没有给这个存储空间分配类型啊,这个问题我百思不得其解,请大家帮帮我。
我有一点没说清楚,在这里sizeof(int)=2

类型就好比计量单位,你制作了一个桶,你既可以用公升来做单位,也可以用加仑,也可以用立方米,但是无论怎么样,你的桶的大小是不会随着单位的变化而变化,而是固定了。

至于用户买了你的桶怎么用那是他的事,是老外可能喜欢用加仑做单位,但是不管如何它只能装x加仑的水,或两升的水,再装多一点就溢出了。

回到这里,malloc(2)申请的空间是以字节为单位的,至于申请的空间怎么用那是你程序员的事,可以把申请的空间作为int类型来用也可以作为double来用,但是你就要注意,如果作为double来用申请的空间就不够了,会溢出的,这也由你程序员负责任的。

所以用malloc申请空间一般都是malloc(sizeof(xx) * xx)

sizeof(int)=2指什么?你在程序什么位置运行这句话了?还是什么意思?
如果是sizeof(int)返回2的话那应该是你所用的编译器的问题。与你所说的malloc()分配空间没什么直接联系,楼上各位已经分析的很清楚了。

malloc返回的是void *类型指针,你可以将其强制转换为任何你需要的类型指针。

指针类型决定了变量类型。也决定了空间类型。

完全同意一楼的说法,实际上malloc(sizeof(...))返回的是(void *)类型。
说得明白点就是没有类型。假设现在你这样分配:malloc(sizeof(int));在vc环境下int是四个字节的,malloc函数首先在内存中分配一个四字节的空间(四字节是连续的)。然后返回第一个字节的地址,也就是指向第一个字节的指针。
若现在这样:
p=(char *)malloc(sizeof(int));它取了四字节空间的第一个字节
p=(short *)malloc(sizeof(int));它取了四字节空间的头两个字节
以此类推 当然了,你不能越界。比如:p=(double *)malloc(sizeof(int));

其实数据存储时是不分类型的,只看占用的空间,有人喜欢用char类型代替较小的整形,也是这个道理