【问题标题】:Having trouble using Structures and Pointers in C在 C 中使用结构和指针时遇到问题
【发布时间】:2011-05-28 10:06:01
【问题描述】:

我正在用 C 语言编程。 考虑以下代码。

我的结构定义为:

// Define the stack
struct stackNode {
char data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

使用了以下变量:

StackNode topTracker; // The pointer of this stackNode will always point to the top of the stack

我正在尝试完成以下功能。

char pop( StackNodePtr *topPtr ){
    char returnable;
// store the Node.data from the top of the stack
    returnable = *topPtr.data; //[1]
// Set the next Node to the top of the stack
    topTracker.nextPtr = *topPtr.nextPtr; //[2]
// return the Node data.
    return returnable;

问题是我收到以下错误:分别在点 [1] 和 [2]

“在非结构或联合的情况下请求成员 data' in something not a structure or union" "request for membernextPtr'”

如何绕过这个错误并实际访问指针 *topPtr 的数据和 nextPtr?假设 *topPtr 在运行时将是一个指向实际 StackNode 的指针。

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    topPtrStackNodePtr* 类型,它是StackNode** 的别名。这意味着*topPtr 的类型为StackNode*,它是一个指针类型,您必须使用-> 访问成员。

    还要注意运算符.-> 的绑定比一元* 更强。因此,您必须使用括号来操纵评估顺序:

    returnable = (*topPtr)->data;
    

    returnable = (**topPtr).data;
    

    【讨论】:

    • returnable = (*topPtr)->data;那就是那个做的。在我的堆栈中应用了这个逻辑,它现在可以正常工作了。谢谢你。奥斯瓦尔德。
    【解决方案2】:

    *topPtr 给出StackNodePtr。 离结构还有一层。 您需要再次取消引用它以获取 StackNode。
    (**topPtr) 将提供 StackNode。

    使用(**topPtr).data(*Ptr)->data 获取结构成员。

    【讨论】:

    • Cheers Alvin,与 Oswalds 的回答类似,也会将其标记为正确。
    【解决方案3】:

    你使用了错误的语法,它应该是 topPtr->data。 另外,如果您需要学习,请立即了解内存泄漏。 它在你上面的程序中。 所以一旦你检索到你的数据就释放内存 例如。 可返回 = topPtr-> 数据; StackNodePtr *tmp = topPtr; topTracker->nextPtr = topPtr->nextPtr; 免费(tmp); 可退货;

    【讨论】:

    • 感谢 Nik,这是一个匆忙的项目,今天需要参与 - 而我对 C 的了解有限。在深入了解 C 之前,我将学习如何管理我的内存和垃圾,但现在它会做。 :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多