使用目的是什么 sizeof 使用 mallocC?为什么有必要?

我的意思是我们可以使用 sizeof 但我们已经知道我们在内存中分配的大小(= 1000 字节)?

我是C初学者。这可能是一个非常明显的问题。

有帮助吗?

解决方案

数据类型和内存问题

答案在于数据类型。虽然你知道 有多少个物体 您想要为其分配内存,您可能不想费力地计算它们的大小。

可维护性也是如此

另外,如果这些成分以后发生变化怎么办?然后你就完蛋了,必须编辑所有内容。

所以这在你的例子中是不相关的,没有上下文。但是,如果您想要为更复杂的事物分配内存(例如,具有多个字段的结构),它确实变得非常重要和有用。

示例 1(这里不太重要):

char *s = malloc(100 * sizeof(char));

但是嘿,这只是 chars,没关系,你可以这样做:

char *s = malloc(100);

一般有效。但这是搬起石头砸自己的脚,正如你将在下面看到的。

示例 2(已经有点重要了):

int *i = malloc(100 * sizeof(int));

当然,你可以这样写:

int *i = malloc(100 * 4);

也就是说,假设您只针对一种您非常了解的架构进行开发。

示例 3(开始变得相当重要了!):

typedef struct s_listelement{
    int                  dataitem;
    struct s_listelement *link;
}              t_listelement;

t_listement *le = malloc(sizeof(t_listelement));

现在想象一下链接列表项的结构包含一堆其他字段......

你愿意相信吗 sizeof(), ,或者自己去玩玩数学?

其他提示

假设你想分配内存来存储 ints。你最初的猜测是,好吧,我需要 n 整数,每个整数需要 x 字节。所以空间将是 n*x 字节。

但实际上这个 x 取决于架构。可能是 16 位、32 位等。所以为了让你的代码能够在不同的环境下工作,建议使用 n*sizeof(int) 代替 n*x.

例如,如果需要为 10 个整数分配空间:

int *p=malloc(sizeof(int)*10);

如果改变大小会发生什么 mallocated?

您必须 1) 再次计算新大小(抛开多个目标架构问题,您必须计算每个目标中的新大小),2) 搜索所有 malloc(1000), ,确保它指的是 mallocated (这可能不明显)并替换为新尺寸。

您使用时不会遇到这两个问题 sizeof. 。因此使用 sizeof 导致更易于维护和可读的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top