感谢所有的帮助,我只是让操作顺序错误而且我忘记了我不需要&在指针之前,因为这是自动完成的。我的目标是找到比使用&(* head)更短的方式,我认为只有头部可能以某种方式做到这一点,因为我使用调试器感到困惑。
只是一个简单的问题,没什么大不了的。
这是我工作状态下的问题:
void getInput_stock(stock **head, char fgr, char bgr)
{
scanStr(&(*head)->name, 60);
}
这就是scanStr的样子:
int scanStr(char *input, int limit);
我一直在处理结构,但他们仍然困惑我。我在scanStr(&(*head)->name, 60);
处创建了断点,并检查了变量&(*head)
和head
,它们都返回了相同的地址。但是当我尝试使用scanStr(head->name, 60);
而不是帖子顶部给出的示例时,我收到错误left of '->name' must point to struct/union
。我相信它是一个指向结构的指针。为什么我收到此错误?我的意思是&(*var)
与var
不相同?
struct stockNode {
int ID;
int price[2];
int qty;
int date[3];
unsigned int number[2];
char name[60];
char nameProv[60];
char town[14];
char street[30];
struct stockNode *next;
};
typedef struct stockNode stock;
答案 0 :(得分:0)
由于name
是stock
结构的成员 - 当变量是指向结构的指针时,访问其中一个成员只是使用->
运算符。
在您的使用中
void getInput_stock(stock **head, char fgr, char bgr)
{
scanStr(&(*head)->name, 60);
}
head
是指向stock
指针的指针 - 这意味着对它的第一次引用(*head)
成为指向stock
的指针,因此访问其成员需要简单->
1}}运营商使用。
你的功能应该是
void getInput_stock(stock **head, char fgr, char bgr)
{
scanStr((*head)->name, 60);
}