我有一个基本问题。到目前为止,我应该对指针有足够的了解了。在我看来,configData是(struct-config类型的)链表中的第一个链接,而procNames是指向struct-conconfig类型链表中第一个链接的指针。因此,如果我想说procNames等于configData,那么我需要访问指向configData的指针,即*configData
。不管怎样,我觉得我错过了什么。有人看到问题了吗?此外,我得到了下一个错误:错误:invalid type argument of unary ‘*’ (have ‘struct config’)
struct config_line {
char name[MAX_WORD];
int time;
};
struct config {
struct config_line *lines;
int count;
};
//global variable
struct config configData;
//local variable
struct config *procNames;
//the problem (done locally)
procNames = *configData;
我想你想要
procNames = &configData;
这将指针procNames
设置为结构configData
的地址。
您可以使用访问元素
procNames->count
procNames->lines[i].name // Pointer to the 1st char of the name in the i'th config_line structure
或
configData.count
configData.lines[i].name
请记住,由于lines
本身就是一个指针,您需要为每个config_line
结构分配内存:
struct config_line thisLine; // Declare a structure
procNames->lines = &thisLine; // Point to it
或
// Declare a pointer to an array of structures, allocate memory for the structures
struct config_line *linePtr = malloc(NUM_STRUCTS * sizeof(struct config_line));
procName->lines[i] = *linePtr; // Points to 1st structure in the array
根据您对尝试执行的操作的描述,您需要获取configData的地址(在最后一行写入&configData)。最后一行要做的是取消引用configData,编译器不允许这样做,因为configData不是指针(它内部不存储地址)。
错误消息对此相当清楚。Unary*采用单个指针作为参数,但使用的参数类型为struct-config,而不是指针。