C语言 我不知道为什么我得到这个结果,我的指针练习

hmtdttj4  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(207)

我被要求写这些代码的作用:

  1. int main()
  2. {
  3. int var1,var2, *ptr;
  4. ptr=&var1;
  5. var2=12;
  6. *ptr=var2;
  7. var1=var1/ *ptr;
  8. printf("%d %d", var1,var2);
  9. }

现在我的问题是这意味着什么。首先ptr存储var 1的地址。然后var 2被定义为12。下一步idk它意味着什么,最后一个也是如此。我最终打印了1和12。不知道为什么。
我所理解的是12也存储在ptr中。所以ptr有var 1地址,var 1也得到值12。所以最后一步是var 1 =12/12。这就是为什么我在printf中得到1和12。这只是我所理解的,但我真的不明白,我不确定它是否正确。顺便说一句,ty代表undesrtanding。

sigwle7e

sigwle7e1#

ptr=&var1;
&var1是对象var1的地址。ptr = &var1将地址存储在对象ptr中。
var2 = 12;
这会将12储存在对象var2中。
*ptr = var2;
它将var2的值存储在对象*ptr中。由于12存储在var2中,因此它将12存储在对象*ptr中。由于ptr的值是var1的地址,因此*ptrvar1。因此*ptr = var2将12存储在对象var1中。
var1 = var1 / *ptr;
*ptrptr指向的对象,即var1。因此,var1 / *ptr将分子var1的值除以分母*ptr的值,即var1。分子和分母的值都是12,因此var1 / *ptr为1。然后var1 = var1 / *ptr将1存储在对象var1中。
printf("%d %d", var1,var2);
这将打印var1var2的值,并转换为十进制。根据上述内容,var1包含1,var2包含12,因此打印“1 12”。

cu6pst1q

cu6pst1q2#

指针ptr由变量var1的地址初始化。

  1. ptr=&var1;

所以使用表达式*ptr和使用表达式var1是一样的,因为取消引用指针会得到变量var1
因此这些表达式语句

  1. *ptr=var2;
  2. var1=var1/ *ptr;

可以被等效地重写为

  1. var1 = var2;
  2. var1 = var1 / var1;

var2最初被赋值为整数常量12

  1. var2=12;

并且变量var1的结果值将等于1,而与它在赋值表达式var1 / var1的结果之前具有哪个值无关(当然,假设.var1不等于0)

展开查看全部

相关问题