如何增加链接列表中的指针

时间:2019-05-15 17:59:35

标签: c linked-list

要递增指向数组的指针,请执行*(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 个答案:

答案 0 :(得分:1)

鉴于您的结构可能是作为多个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。