【问题标题】:setting an int pointer equal to a regular int设置一个等于常规 int 的 int 指针
【发布时间】:2014-03-30 02:22:15
【问题描述】:

我正在尝试将指针 (processNum) 设置为等于常规 int (processNumTemp)。我怎样才能做到这一点?我尝试只做 processNum = processNumTemp 这给出了一个错误,因为我试图设置一个等于非指针的指针。我怎样才能使这项工作?以下是我的代码:

int *processNum = (int *)malloc(sizeof(12));
  int processNumTemp;

  processNumTemp = atoi(argv[1]);

  processNum = processNumTemp;

【问题讨论】:

  • 不清楚是要将processNumTemp复制到分配的空间中,还是要将processNum指向processNumTemp。如果是后者,那么您应该删除您的malloc

标签: c pointers atoi


【解决方案1】:

processNum = &processNumTemp;

这会将processNumTemp 的地址存储到processNum 中。我相信这就是你想要做的。然后,您可以通过取消引用指针来获取值。那是通过使用 *processNum.

【讨论】:

    【解决方案2】:

    当您将指针称为processNum 时,您指的是它的地址,而不是它的内容。如果你想改变变量指向的内容,你应该使用*processNum,否则你改变的是指针指向的what,而不是内容它指向什么。

    假设processNumTemp = 74。在您的代码中,您告诉processNum 它现在应该指向内存地址74,这很可能是无效的。您没有告诉它在当前指向的内存地址 store 74(这可能是您想要的)。

    因此,您可以通过以下方式更改指向的数据:

    *processNum = processNumTemp;
    

    或者您可以更改指针指向的内容

    procesNum = &processNumTemp;
    

    前者复制存储在processNumTemp地址的值,并将其替换为之前存储在processNum指向的位置的值。

    后者不会改变processNum 指向的数据,而是改变它所指向的what。在这种情况下,我们让它指向与 processNumTemp 指向的相同的东西。

    【讨论】:

      【解决方案3】:

      De-reference 访问存储在那里的数据的指针,然后将其分配给相同类型的东西。

      *processNum = processNumTemp;
      // * is the pointer de-referencing operator
      // once you have exposed the data, now assign it
      // to something of the same type.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多