c++ - 更多左值错误

标签 c++ arrays pointers indexing lvalue

下面是一个三重嵌套索引方案。我指向指针数组的指针在注释行中被取消引用......理论上这应该给我一个指针。我从中减去一个,然后引用它并将其重新分配给我指向指针数组的指针。但是该行给出了操作数“&”的左值错误。

让我说清楚。我既想知道为什么会在此处发生错误,又想获得一种方法,该方法可将指针数组中前一个元素的地址分配给我的帧双指针。

我只会接受同时满足这两个标准的完整解决方案....

#include <iostream>

typedef struct frame_s {
  double ** TestArrayPointer;
} frame_t;

main () {

  double * TestArray;
  double ** TestPointerArray;
  TestArray = new double [100];

  TestPointerArray = new double * [100];

  for (unsigned int Counter = 0; Counter<100; Counter++)
  {
     TestArray[Counter]=Counter;
     TestPointerArray[Counter]=&(TestArray[Counter]);
  }

  frame_t Frames[10];
  for (unsigned int Counter = 0; Counter<10; Counter++)
    Frames[Counter].TestArrayPointer = &(TestPointerArray[Counter*10]);

  //Move pointer to point at array position one back.
  Frames[2].TestArrayPointer=
      &(*(Frames[2].TestArrayPointer)-1); //error! here <--

  //OUTPUT Values...
  for (unsigned int Counter = 0; Counter<100; Counter++)
    std::cout << "P: " << TestPointerArray[Counter] << " V: " 
          << *(TestPointerArray[Counter]) << std::endl;

}

最佳答案

Frames[2].TestArrayPointer=
  &(*(Frames[2].TestArrayPointer)-1);

这里不需要取消引用然后取回地址。你可以直接做-

Frames[2].TestArrayPointer = (Frames[2].TestArrayPointer)-1) ;

但这有一个潜在的问题。

  • 如果索引为 0 怎么办?运行时错误。
  • 如果索引是最后一个索引怎么办?内存泄漏。

关于c++ - 更多左值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412601/

相关文章:

c++ - 如何在不破坏移动和复制构造函数的情况下声明虚拟析构函数

c - 如何获取C指针数组长度?

c - 将文件指针发送到另一个函数(C 编程)

c++ - LZW压缩&字典

c++ - 使 vector 3D 从 vector AND 派生,需要保留字段 x y z

arrays - 使用 cmd 创建一组文件夹 - 设置带有空格的循环变量

javascript - 获取数组数组中的列

c - 二进制 * 的无效操作数(有 'char *' 和 'int *' )

c++ - Winsocks 2异步问题

c++ - vector 在递归调用中使用时与数组有何不同?