取消引用成员指针

时间:2016-12-11 04:34:09

标签: c++ pointers dereference pointer-to-member

我有一个c ++结构,它有一个动态分配的数组作为指针。我有一个函数来反转数组,但它似乎不起作用(我认为它是因为临时变量指向原始值)。

struct s {

   int *array;
   int length;

   ...

   s(int n) {
       this->array = new int[n];
       this->length = n;
   }

   ...

   void reverse() {

       for (int i = 0; i < this->length; i++) {
           int n = this->array[i];
           this->array[i] = this->array[this->length - i - 1];
           this->array[this->length - i - 1] = n;
       }

   }

   ...

}

我认为这是做this->array[this->length - i - 1] = this->array[i] 因此阵列保持不变并且不会反转。我不知道如何顺序数组指针或如何在n中取this->array[i]的值。

2 个答案:

答案 0 :(得分:4)

你的反向不起作用的原因是你要经历整个阵列的长度。你只需要经历一半。如果你经历了下半场,那么你就不会逆转它了。

例如,如果您尝试撤消[1, 2, 3, 4],则

after i = 0: [4, 2, 3, 1]
after i = 1: [4, 3, 2, 1]
--- reversed ---
after i = 2: [4, 2, 3, 1]
after i = 3: [1, 2, 3, 4]
--- back to original ---

相反,只需要进行循环

for (int i = 0; i < this->length / 2; i++) {
    ...
}

答案 1 :(得分:0)

另外,使用2个索引器可以大大简化代码:

void reverse()
{
    int limit = length / 2;
    for ( int front = 0 , back = length - 1; front < limit; front++ , back-- )
    {
        int n = array[front];
        array[front] = array[back];
        array[back] = n;
    }

}