【问题标题】:Im not sure why im getting this result out of my pointers exercise我不确定为什么我会从我的指针练习中得到这个结果
【发布时间】:2022-11-22 05:19:05
【问题描述】:

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

int main()
{
    int var1,var2, *ptr;
    ptr=&var1;
    var2=12;
    *ptr=var2;
    var1=var1/ *ptr;
    printf("%d %d", var1,var2);
}

现在我的问题是这意味着什么。起初 ptr 存储 var1 的地址。然后 var2 被定义为 12。下一步 idk 是什么意思,最后一步也是如此。我终于打印了 1 和 12。不知道为什么。

我的理解是 12 也存储在 ptr 中。因此,由于 ptr 具有 var1 地址,因此 var1 的值也为 12。所以最后一步是 var1=12/12。这就是为什么我在 printf 中得到 1 和 12。这正是我所理解的,但我并没有真正理解它,我不确定它是否正确。顺便说一句,这是不理解的。

【问题讨论】:

  • 您需要阅读教科书或教程,它会解释所有这些的含义。 SO 不是辅导服务,您需要学习语言基础知识。
  • *ptr = var2;表示将var2的值存储在ptr指向的地方,即var1。所以这与var1 = var2; 相同。

标签: c pointers variables printf


【解决方案1】:

ptr=&var1;

&var1是对象var1的地址。 ptr = &var1将地址存储在对象ptr中。

var2 = 12;

这将 12 存储在对象 var2 中。

*ptr = var2;

这会将 var2 的值存储在对象 *ptr 中。由于12存储在var2中,所以它在对象*ptr中存储了12。因为ptr的值是var1的地址,所以*ptr就是var1。所以*ptr = var2在对象var1中存储了12。

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”。

【讨论】:

    【解决方案2】:

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

    ptr=&var1;
    

    所以使用表达式 *ptr 与使用表达式 var1 是一样的,因为取消引用指针你得到变量 var1

    因此这些表达式语句

    *ptr=var2;
    var1=var1/ *ptr;
    

    可以等效地重写为

    var1 = var2;
    var1 = var1 / var1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 2019-07-25
      • 2016-11-04
      • 2021-01-06
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多