首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >malloc(sizeof (int )) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

malloc(sizeof (int )) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))
EN

Stack Overflow用户
提问于 2013-03-05 12:25:41
回答 1查看 86.4K关注 0票数 23

我承认这三个词都有不同的含义。但是,我不明白这些都适用于哪些特定的情况。有没有人能分享其中每一个的例子?谢谢。

代码语言:javascript
复制
       malloc(sizeof(int))
       malloc(sizeof(int *))
(int *)malloc(sizeof(int))
EN

回答 1

Stack Overflow用户

发布于 2013-03-20 23:10:05

最简单的语法模式是:

代码语言:javascript
复制
 int *p;
 p = malloc (cnt * sizeof *p);

此语法不会强制您更改代码,如果类型(和或大小...)*p变化的数量,例如在

代码语言:javascript
复制
 struct mysstruct *q;
 q = malloc (cnt * sizeof *q);

这将避免像这样的问题

代码语言:javascript
复制
struct mysstruct *z;
z = malloc (cnt * sizeof(struct hisstruct)); // Auch!

,另外:sizeof expr表单也更短。

更新:为了演示p = malloc(CNT * sizeof *p)这个测试程序的正确性:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

struct mystruct {
        int i;
        char s[14];
        };
int main(void)
{
struct mystruct *p;
size_t siz;

siz = sizeof p;
printf("Sizeof p := %zu\n", siz);

siz = sizeof *p;
printf("Sizeof *p := %zu\n", siz);

printf("Allocating %zu (%u structs, each of size %zu) bytes to be assigned to p...\n"
        , 10u * sizeof *p
        , 10u, sizeof *p
        );
p = malloc(10 * sizeof *p);

return 0;
}

下面的输出如下:

代码语言:javascript
复制
Sizeof p := 8
Sizeof *p := 20
Allocating 200 (10 structs, each of size 20) bytes to be assigned to p...
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15222774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档