指针ABC。错误:一元'*'的无效类型参数(有'struct config')

时间:2012-03-04 23:39:38

标签: c pointers struct linked-list

我有一个基本问题。我现在应该对指针有足够的了解。我看到它的方式configData是链接列表中的第一个链接(类型为struct config),而procNames是指向struct config类型的链表中第一个链接的指针。所以,如果我想说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;

2 个答案:

答案 0 :(得分:3)

我想你想要

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

答案 1 :(得分:2)

根据您对要执行的操作的描述,您需要获取configData的地址(在最后一行写入& configData)。你在最后一行尝试做的是dereference configData,编译器不会让你这么做,因为configData不是一个指针(它不会在里面存储一个地址)。

错误信息相当清楚。 Unary *将单个指针作为参数,但是使用类型为struct config的参数,而不是指针。