Указатели ABC. ошибка: неверный аргумент типа унарного ‘*’ (есть «struct config») - PullRequest
2 голосов
/ 05 марта 2012

У меня есть основная проблема. Я должен знать достаточно об указателях к настоящему времени. На мой взгляд, 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 ]

3 голосов
/ 05 марта 2012

Я думаю, что вы хотите

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
2 голосов
/ 05 марта 2012

Исходя из вашего описания того, что вы пытаетесь сделать, вам нужно взять адрес configData (напишите & configData в последней строке).В последней строке вы пытаетесь выполнить разыменование configData, которое компилятор не позволит вам сделать, так как configData не является указателем (он не хранит адрес внутри).

Сообщение об ошибке довольно яснона этом.Unary * принимает в качестве аргумента один указатель, но используется аргумент типа struct config, а не указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...