Как увеличить указатель внутри связанного списка - PullRequest
0 голосов
/ 15 мая 2019

Чтобы увеличить указатель, который указывает на массив, мы делаем *(p+i) или *(p++), но как мне увеличить указатель, который находится внутри связанного списка?У меня есть такая структура:

typedef struct list carPilot, *pCarPilot;
struct list{
    pilot pilot;
    car car;
    int *time;
    pCarPilot prox;
};

struct race {
    int laps;     
    int size;    
    int n_cars;   
};

/* ------------------ */

int times[race.cars][race.laps];
pCarPilot list = NULL;

for(j = 0; j < race.laps; j++) {
     times[i][j] = calculaSegundos(idade,peso,exp,potencia,caract.comprimento); 
     *(list->time+ j) = times[i][j];  // my error is HERE
}

Я пытался сделать *(list->time + i) и *(list->time ++), но когда я запускаю код, программа просто останавливается.

1 Ответ

1 голос
/ 15 мая 2019

Учитывая, что ваши структуры, вероятно, созданы как несколько вызовов malloc, они, скорее всего, распределены по памяти.

Представьте себе память для массива. Вот так:

 p
-----------
|0|1|2|3|4|
-----------

, чтобы вы могли позвонить *(p + 3), чтобы получить доступ к ближайшему значению

Для динамически размещаемых структур это, скорее всего, что-то вроде

 p
---------------------------
|0|other thing|1|a|2|etc..|
---------------------------

Так что *(p + 2) находится внутри other thing, а это не то, что вы ожидаете.

Обходной путь заключается в том, что связанный список имеет указатель внутри; так, например, list->prox должен быть следующим экземпляром. Нет необходимости напрямую касаться указателей.


Кстати, ваш carPilot сам по себе является типом; таким образом, вы не должны добавлять int перед ним.

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