在malloc中进行类型转换

16 浏览
0 Comments

在malloc中进行类型转换

这个问题已经有答案了:

我需要对malloc的结果进行类型转换吗?

我知道这个:我需要对malloc的结果进行类型转换吗?

我已经读了这篇文章和其他相关问题,但是我仍然没有解决我的疑虑。我理解类型转换会自动进行,但是我无论读多少次这些论点,都无法理解这个错误

主要的论点是intpointer可能具有不同的大小。以一个例子为例,假设int*的大小为8,而int的大小为4。

int *x = (int*) malloc(sizeof(int));

首先,malloc()分配的字节数为4,虽然变量x将存储一个大小为8字节的指针。

我明确地将malloc的返回值转换为(int *),顺便说一句,这个大小为8。为什么会有任何位数的损失呢?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你的房子宽度为50英尺。你的房子地址是'40, Church st, Newtown'。
假设你的房子旁边有一个像沃尔玛或者学校这样的大商店,它有450英尺宽。
但是它的地址是'50, Church St, Newtown'。

你需要用不同大小的纸来写这些地址吗,因为一个比另一个大?当然不需要。
指针与地址是同义词,它是一个位置。存储在那里的内容(在你的案例中是4字节的int)不会改变地址长度。

所以最终,x的大小将为8,并将指向一个4字节大小的内容。

0
0 Comments

如果您没有包含stdlib.h头文件,那么malloc的返回值很可能在返回给调用代码之前被截断。理论上,这是未定义行为。如果malloc的返回值被截断,这就类似于使用:

int a = 10;
int* ap = &a;
int temp = (int)ap;    // This is where you lose the pointer value due to truncation.
int* bp = (int*)temp;

0