【发布时间】:2020-08-12 21:45:14
【问题描述】:
在下面的代码中,我想更好地理解 int *z = malloc(sizeof(int); 发生了什么
对我来说,它创建了一个指向 int 的指针。然后*z得到x指向的值(2)和y指向的值(4)之和。
现在 *z = 6。这是否意味着 *z 不指向任何东西?它只存储一个int?我以为 *z 是指针,指针是地址?感谢您的帮助理解。
int *add(int *x, int *y)
{
int *z = malloc(sizeof(int));
*z = (*x) + (*y);
return z;
}
int main(void)
{
int a = 2;
int b = 4;
int *ptr = add(&a, &b);
printf("sum = %i\n", *ptr);
}
【问题讨论】:
-
*zderefences 允许您读取/写入指向的内存位置的指针。不要忘记在main中free(ptr)来释放你malloc'd 的内存。此外,这个例子是非常人为的。 IRL,您只需在没有指针的情况下完成所有这些操作,堆栈分配所有内容并直接使用整数返回值,所以也许这不是您需要指针的一个很好的动机。 -
可能是一个微妙的点,但
z = malloc( sizeof (int))不会创建指针。它分配(“创建”不准确,但我想会通俗地使用)内存并将分配内存的地址分配给z。*z不是指针。z是一个指针。*z是存储在z指向的地址的值。指针不是地址;它是一个保存地址的变量。