【问题标题】:Can someone explain what this pointer refers to here?有人可以解释这个指针在这里指的是什么吗?
【发布时间】:2021-02-05 07:41:20
【问题描述】:

我遇到了一个素数生成器,他们在其中使用了这行代码

bool *numberlist = new bool[size+1];

这会产生什么?

代码在for循环中也有这个:

numberlist[i*j]=true;

numberlist 不是指针吗?你怎么能像数组一样遍历它。

【问题讨论】:

  • 在 C 中,数组和指针在很多情况下是可以互换的。在第一段代码中,指针指向数组的第一个元素。在第二个中,它访问相对于指针的i*jth bool 值。
  • 那么,numberlist[ ij ] == *numberlist[ ij ] ?
  • 如果我理解您的疑问,这可能是 stackoverflow.com/questions/56220681/… 的欺骗。
  • @Sharkum no numberlist [i*j] == *(numberlist + (i*j)); []operator 已经做了一个指针解引用

标签: c++ arrays pointers


【解决方案1】:

分解一下,第一行代码bool *numberlist = new bool[size+1]; 声明一个大小为 [size+1] 的动态布尔数组。 for循环中的代码numberlist[i*j]=true;表示元素i*j为真。在 C++ 中,当我们使用大括号运算符 ( []) 我们正在做两件事。一个算术指针(因为数组是按顺序存储在内存中的)和两个解引用指针(访问指针指向的值)。

【讨论】:

    【解决方案2】:

    变量numberlist 包含一个指向大小为size + 1 的布尔数组的指针。

    您可以通过运算符[] 访问元素。当您遍历内存中的 boolean 元素时,指针算法也适用于此。在 for 循环中,您可以使用:

    for (size_t i = 0; i < size; i++) {
      std::cout << "numberlist[ " << i << "] = " << numberlist[i] << std::endl;
    }
    

    例如,如果您正在遍历 2D 矩阵,通常存储按行排序的项目并使用两个 for 循环来遍历行/列。您的numberlist 可能就是这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2017-05-09
      相关资源
      最近更新 更多