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

nou*_*oir 3 c malloc pointers allocation dynamic-memory-allocation

char    *str;
str = malloc(sizeof(char) * 5);
Run Code Online (Sandbox Code Playgroud)

此代码为变量分配5个连续的内存槽,该变量str属于类型char *.

char    *str;
str = malloc(sizeof(char *) * 5);
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 5

第一部分

此代码为变量分配5个"连续内存槽",该变量str属于类型char *.

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

相关的C11,章节§7.22.3.4

malloc()函数为大小由其指定size且其值不确定的对象分配空间.

因此,没有"连续块",它是具有指定大小的内存区域("an"对象的空间).

在后面的例子中,大小是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
Run Code Online (Sandbox Code Playgroud)

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