我刚刚第一次在C里玩,而且我不知道为什么malloc没有给我我预期的内存量.以下代码:
printf("Allocating %ld bytes of memory\n", 5*sizeof(int));
int *array = (int *) malloc(5*sizeof(int));
printf("%ld bytes of memory allocated\n", sizeof(array));
Run Code Online (Sandbox Code Playgroud)
结果是:
Allocating 20 bytes of memory
8 bytes of memory allocated
Run Code Online (Sandbox Code Playgroud)
我已经检查过我确实在调用malloc来给我20个字节,但是不明白为什么在调用malloc之后,指针只有8个字节.
array不是数组而是数组int *.所以它的大小总是指针的大小.
该sizeof运营商不会告诉你多少内存的指针是动态分配.
如果另一方面你有这个:
int array2[5];
Run Code Online (Sandbox Code Playgroud)
然后sizeof(array2)将是20,假设一个int是4个字节.
该sizeof运营商告诉你它的操作数的大小。array具有在您的平台上占用八个字节的类型int*(指向int)。该sizeof运营商不能找出多久数组array实际上是一个点。什么是回报并不表示分配了多少内存。
该malloc()函数要么失败(在这种情况下它返回NULL),要么成功,在这种情况下它返回一个指向至少与您需要一样大的内存区域的指针。