【问题标题】:Assigning a value to a pointer给指针赋值
【发布时间】:2011-10-10 09:17:01
【问题描述】:

如果我有以下示例:

int *x;
x = func(a);

对于语句:x = func(a);,我们是否说我们正在将地址返回给x?或者,我们究竟是如何阅读它的?

编辑是否有资格说我们正在返回指向x 的指针?如果是这样,你能解释一下这是如何完成的吗?我的意思是,我们如何返回一个指针?

【问题讨论】:

    标签: c++ pointers assign


    【解决方案1】:

    x 是指向int 的指针,换句话说,它是存储int 的内存位置的地址。所以x = func(a) 表示func 返回一个int 的地址并将其存储在变量x 中。

    注意不要返回在func 返回后内容未定义的局部变量的地址。

    【讨论】:

      【解决方案2】:

      RE:您的编辑:

      编辑:是否有资格说我们正在返回一个指向 x 的指针?如果是这样,你能解释一下这是如何完成的吗?我的意思是,我们如何返回一个指针?

      是的,它当然符合条件。尝试将指针视为任何其他数据类型并将其视为任何其他数据类型。在引擎盖下,它们只是内存地址。可以像返回任何其他数据类型一样返回指针。

      以这段代码为例:

      int* giveMeAPointer() {
        return y;
      }
      int* x = giveMeAPointer();
      

      假设“y”被全局声明为:“int* y = ...”。现在“x”指向的内存地址与“y”指向的内存地址相同。

      现在假设“y”没有被声明为一个指针,而是一个普通的 int(例如“int y = 5”)。该函数可以做到这一点并且仍然有效:

      int* giveMeAPointer() {
        int* result = &y;
        return result;
      }
      

      【讨论】:

        【解决方案3】:

        *x 指向内存中的 int 类型变量。所以函数func应该返回地址到int。

        int *x;
        x = new int;          // create your own int 
        *x = 5;               // access - set it's value
        delete x;             // delete int - free memory
        x = getGlobalCounter();
        (*x)++;               // increment global pointer
        

        例如getGlobalCounter函数:

        static int counter;
        int *getGlobalCounter() {
           return &counter;   // return address of counter
        }
        

        但删除从函数返回的对象并不总是好主意。在这种情况下,它应该会导致运行时错误,因为计数器没有像上面的示例那样动态分配 int

        【讨论】:

          【解决方案4】:

          如果您将变量的值分配给函数的返回类型,则该返回类型必须与变量的类型匹配。指针也是如此。

          所以,如果你有:

          int* myPointer;
          

          还有……

          int* func();
          

          然后设置myPointer等于func()会将“myPointer”指向的内存地址更改为func()返回的内存地址。

          【讨论】:

            【解决方案5】:

            x 是一个指针,特别是指向一个 int 的指针。所以应该很明显,有两个内存位置被使用。一个用于指针,一个用于它指向的内存(假设指针不为空)。

            指针本身拥有一个内存地址,特别是它所指向的内存位置。 0xa456e4fa 之类的东西。

            是的,func() 正在返回一个指针。 func 的原型如下所示..

            int * func(someObj a); //I don't know the datatype of your parameter,
                                   //so I'm just making something up.
            

            请注意,返回类型是一个指向 int 的指针。从这个和我之前所说的,应该很明显这将返回什么。 0xyyyyyy 形式的东西,或内存地址/指针。该内存地址进入您的 x 指针。

            请记住,指针本身并没有保存它所指向的数据,它只是地址。你真的没有理由不能返回一个指针。但是,您确实需要小心返回的内容。您不想返回局部变量的地址,因为一旦函数完成执行,该变量将超出范围。然后,您将返回无效地址。但是,返回本地指针的 VALUE 很好,因为您返回的值(地址)将被保留,它指向的内存也将被保留。

            我也刚刚意识到我给你写了一本书。妈的,累了就去逛逛。

            【讨论】:

              【解决方案6】:

              该语句仅读取 x 被赋予函数func 返回的值。为了使代码编译时没有错误,func 应该返回一个地址。为了使代码按AlexFZ 指出的那样执行,您应该注意func 不会返回函数本地变量的地址。

              【讨论】:

                【解决方案7】:

                表示func()返回一个int*类型的变量。

                是否有资格说我们正在返回一个指向 x 的指针?

                不,我们返回一个指向整数的指针并将它分配给 x,因为它是一个指针。

                这是一个返回 int 指针的示例代码
                int* func(int a)
                {
                int *y = &a;
                return y;
                }

                【讨论】:

                  猜你喜欢
                  • 2013-05-16
                  • 1970-01-01
                  • 2017-08-20
                  • 2013-07-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-01-02
                  相关资源
                  最近更新 更多