c++ - 如何使用索引取消引用数组内部的指针?

标签 c++ arrays pointers dereference

我正在处理一个堆栈分配,其中我们创建一个指向名为 Data 的结构的指针堆栈。我们的教授试图帮助我们在设计程序时养成关于安全性的良好习惯,这就是为什么我们有一堆指向结构的指针而不是一堆结构本身。

我知道通常在取消引用指针时,您会使用星号来执行此操作。示例:

int x = 5;
int* xptr = &x;
cout << *xptr << endl;

我的理解是,上面的代码将创建一个值为 5 的 var x,然后创建一个存储 var x 地址的指针,然后通过打印 *xptr,您将取消引用该指针,这会导致打印输出为 x (5) 的值。如果到目前为止我有任何不正确的地方,请告诉我。

现在进入堆栈类,我的教授为我们创建了 .h 文件,我们有以下属性:

int top; // this is your top index
Data *stack[STACK_SIZE];

我对堆栈的理解是,我们有一个指向数据结构的指针数组(如名称“堆栈”之前的 * 所示),并且堆栈的字面名称是“堆栈”。我的问题是:当我需要弹出一个数据结构(我称之为 popData)并且我想分配它的值时,我知道我不能只执行 popValue = stack[top] 因为 popValue 是 Data 类型,它无法接收指针的赋值。

我想我可以做到这一点:

Data popData;
*Data popDataPtr;
popDataPtr = stack[top];
popData = *popPtr;

我认为从逻辑上讲这是可行的,但我想知道是否有用于取消引用 ptr 并将其分配在同一行中的语法。我在想:

popData = *stack[top];

popData = stack[*top];

但我不确定什么是正确的。我似乎无法在网上找到这方面的例子。预先感谢任何可以提供帮助的人。

最佳答案

我建议您下次自己尝试一下,看看您的哪些示例有效。

您可以将赋值放在一行中,我建议您在像这样的复杂表达式中添加括号,这样您就不必记住运算符优先级:

Data popData = *(stack[top]);

关于您的其他代码的小评论,这不会编译:

*Data popDataPtr;

指向 Data 的指针的语法与之前的指向 int 的指针没有什么不同:

int* xptr = &x;

因此,要使示例中的代码正常工作,您实际上需要

Data* popDataPtr;

C++ 中有一条很好的经验法则:从右到左阅读声明,例如:

Data * const ptr1; // ptr1 is a constant pointer to a Data
const Data * ptr2; // ptr2 is a pointer to Data which is const (or just to a constant Data)
Data * arr1[]; // arr1 is an array of pointers to Data.

关于c++ - 如何使用索引取消引用数组内部的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62506006/

相关文章:

c++ - 在不使用 for 或 while 的情况下在排序数组中查找元素

c++ - 这样做的正确方法是什么?调用指向指向指针的指针内部的函数?

c++ - C++意外调用继承类的函数

c++ - 在 DPC 中使用唯一锁

javascript - 如何对数组进行排序?

php - 有 C++ SOLR 库吗?

javascript - 如何让这个函数检查 array(table1) 中的元素是否相同?它适用于数字,但不适用于字符串

无法将 char 值分配给结构中的指针

c++ - 为什么抛出局部变量调用 move 构造函数?

C++/LapackE 代码在 Windows 上编译正常,但相同的代码在 Linux 上编译失败