为什么 *y = z 将 y 绑定到 mem 地址,但 *y = *x 只取一个值?
why *y = z binds y to the mem address, but *y = *x takes only a value?
我正在尝试理解指针。
在附带的代码中,我尝试自己弄清楚它们,但我有点困惑。
我执行 *y = z 操作,我看到它使 y 指向分配给 z 的内存地址。
但是为什么 *y = *x 不改变内存地址呢?
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int *x = malloc(sizeof(int));
*x = 3;
int *z = malloc(sizeof(int));
int *y = z;
*y = *x;
printf("x: %i, %p, %p \n y: %i, %p, %p \n z: %i, %p, %p \n", *x, x, &x, *y, y, &y, *z, z, &z);
free(x);
free(z);
}
结果:
x: 3, 0x17b1260, 0x7ffeed5957f8
y: 3, 0x17b1280, 0x7ffeed5957e8
z: 3, 0x17b1280, 0x7ffeed5957f0
感谢任何回答的人。
提供初始值已添加到定义中,因此与表达式相比,它的语法有点奇怪。
在赋值表达式中,我们写“thing being assigned = value”,这很简单。
在简单的声明中,我们写“type name”来声明name到是 type 类型的对象。在更复杂的声明中,我们给出了一种示例表达式,而不是名称。例如,声明“int
*name”表示 *name 是一个 int
,这意味着 name 必须是指向 int
的指针。声明的语法类似于“type sample-expression”,其中声明告诉我们 sample-expression的类型为type,推导出示例表达式中声明的名称的实际类型。
为了向该声明添加初始化,我们附加“= value”。然后我们有“type sample-expression = value”。由于声明的构造方式,这并不是说 sample-expression 被赋予值 value。它说 sample-expression 中的名称初始化为值 value.
这种奇怪的声明结构可能会让学习 C 的人感到困惑,但这只是您必须习惯的事情。
int *x = malloc(sizeof(int));
导致 x
,而不是 *x
,用 malloc(sizeof(int))
初始化。
*x = 3
导致 *x
,而不是 x
,被分配 3
。
我正在尝试理解指针。 在附带的代码中,我尝试自己弄清楚它们,但我有点困惑。 我执行 *y = z 操作,我看到它使 y 指向分配给 z 的内存地址。 但是为什么 *y = *x 不改变内存地址呢?
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int *x = malloc(sizeof(int));
*x = 3;
int *z = malloc(sizeof(int));
int *y = z;
*y = *x;
printf("x: %i, %p, %p \n y: %i, %p, %p \n z: %i, %p, %p \n", *x, x, &x, *y, y, &y, *z, z, &z);
free(x);
free(z);
}
结果:
x: 3, 0x17b1260, 0x7ffeed5957f8
y: 3, 0x17b1280, 0x7ffeed5957e8
z: 3, 0x17b1280, 0x7ffeed5957f0
感谢任何回答的人。
提供初始值已添加到定义中,因此与表达式相比,它的语法有点奇怪。
在赋值表达式中,我们写“thing being assigned = value”,这很简单。
在简单的声明中,我们写“type name”来声明name到是 type 类型的对象。在更复杂的声明中,我们给出了一种示例表达式,而不是名称。例如,声明“int
*name”表示 *name 是一个 int
,这意味着 name 必须是指向 int
的指针。声明的语法类似于“type sample-expression”,其中声明告诉我们 sample-expression的类型为type,推导出示例表达式中声明的名称的实际类型。
为了向该声明添加初始化,我们附加“= value”。然后我们有“type sample-expression = value”。由于声明的构造方式,这并不是说 sample-expression 被赋予值 value。它说 sample-expression 中的名称初始化为值 value.
这种奇怪的声明结构可能会让学习 C 的人感到困惑,但这只是您必须习惯的事情。
int *x = malloc(sizeof(int));
导致 x
,而不是 *x
,用 malloc(sizeof(int))
初始化。
*x = 3
导致 *x
,而不是 x
,被分配 3
。