gpt4 book ai didi

c - 分配大小为 char * 的内存有什么作用?

转载 作者:太空狗 更新时间:2023-10-29 15:54:14 24 4
gpt4 key购买 nike

char    *str;
str = malloc(sizeof(char) * 5);

这段代码为 char * 类型的变量 str 分配了 5 个连续的内存槽。

char    *str;
str = malloc(sizeof(char *) * 5);

这应该分配 5 倍于 char 数组的内存。但是由于 char 数组在我们声明之前没有大小,所以这个语句实际上做了什么?

最佳答案

第一部分

This code allocates 5 "consecutive slots of memory" to the variable str, which is of type char *.

不,不是真的。确切地说,如果成功,它会返回一个指向内存块的指针,该内存块的大小足以容纳 5 个 char,即提供给 malloc() 的大小。在 C 中,sizeof(char) 保证为 1,即 5 个字节。

相关,C11,章节 §7.22.3.4

The malloc() function allocates space for an object whose size is specified by size and whose value is indeterminate.

因此,没有这样的“连续 block ”,它是一个具有指定大小的内存区域(“一个”对象的空间)。

在后面的例子中,大小是char *,一个指针。根据您的环境,字节数将为 5 * sizeof (char *),其中 sizeof(char *) 可以是 4 或 8 或任何其他值。

注意,这两种情况,返回的指针都是void *类型。


另请注意

用于提供 malloc() 参数大小的数据类型对返回的指针没有任何影响或影响,它用于的计算>size 传递给 malloc()

例如,如果恰好对于某个平台,sizeof(int) === sizeof(float),那么,我们可以这样写

    int *intPtr = malloc(sizeof *fltPtr);   //int pointer
float *fltPtr = malloc(sizeof *intPtr); // float pointer

考虑到成功,我们可以完美地利用这两个指针。

关于c - 分配大小为 char * 的内存有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44181689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com