【问题标题】:How to increment a pointer inside a linked list如何增加链表中的指针
【发布时间】:2019-05-15 17:59:34
【问题描述】:

要增加指向数组的指针,我们使用*(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-&gt;time + i)*(list-&gt;time ++),但是当我运行代码时,程序就停止了。

【问题讨论】:

  • 这适用于数组,因为数组在内存中按顺序排列。但不保证链表是这样的。所以你不能这样做。
  • 要增加链表中的指针,您需要一个跟随prox 指针的循环。
  • 欢迎来到 SO!为此发布minimal reproducible example 会很有帮助,它说明您的代码正在崩溃。
  • 拜托,您能否澄清一下您是想获得下一位飞行员的时间还是同一飞行员的下一个(圈速?)时间 ?无论如何,你是如何为time分配内存的?
  • 这缺少了 很多 代码,尤其是关于事物的分配方式。通常你会做list-&gt;time[n] = x 其中n 是你的索引,x 是你的值,但这取决于该列表的大小是否正确,并且 0 n S 是列表大小。

标签: c linked-list


【解决方案1】:

鉴于您的结构可能是作为多个 malloc 调用创建的,它们很可能分布在内存中。

想象一个数组的内存。它的布局是这样的:

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

这样您就可以致电*(p + 3) 访问附近的值

对于动态分配的结构,很可能是这样的

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

所以*(p + 2)other thing 内部,这不是您所期望的。

解决方法是链表内部有一个指针;所以例如list-&gt;prox 应该是下一个实例。无需直接触摸指针。


顺便说一句,您的 carPilot 本身就是一种类型;因此你不应该在它之前添加 int。

【讨论】:

  • 是的,但是想象一下,在执行list-&gt;prox 之前,我想用指针遍历所有数组,然后我执行list-&gt;prox。在这种情况下,我有 5 圈的 4 名飞行员,我想将所有 5 次保存在节点中,然后我执行 list-&gt;prox
  • @whoami 您的内部数组是否已初始化?似乎 Bob__ 可能是对的,因为从 sn-p 开始,您甚至从未初始化时间
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多