问答详情
源自:5-1 Linux C 动态数据结构-静态链表

静态链表问题

p = p->next 改为p = p++为什么运行结果不正确,p += sizeof(a) 这样也不正确求解

#include <stdio.h>

struct weapon {
    int price;
    int atk;
    struct weapon * next;
};


int main(){
    struct weapon a,b,c,*head,*p;
    a.price = 100;
    a.atk = 100;
    b.price = 200;
    b.atk = 200;
    c.price = 300;
    c.atk = 300;
    head = &a;
    a.next = &b;
    b.next = &c;
    c.next = NULL;
    p = head;
    while(p != NULL){
        printf("%d,%d\n",p->price,p->atk);
        p = p->next;
    }
}


提问者:yunyulian 2016-07-17 11:17

个回答

  • 泡面吃胖的孙同学
    2016-07-18 15:42:56
    已采纳

    按我的理解结构体指针传递的应该是结构体的首地址,你把p++后指向的是12个字节后的地址,并非下一个节点的首地址,而是下一个节点的指针地址,肯定无法读出数据,你可以试试在创建结构体的时候将指针写在第一个位置,等同于结构体首地址,应该可以。

  • 笑看人生3668836
    2016-07-18 15:48:50

    没错啊,全复制编译后可正常运行!

  • 泡面吃胖的孙同学
    2016-07-18 15:43:03

    按我的理解结构体指针传递的应该是结构体的首地址,你把p++后指向的是12个字节后的地址,并非下一个节点的首地址,而是下一个节点的指针地址,肯定无法读出数据,你可以试试在创建结构体的时候将指针写在第一个位置,等同于结构体首地址,应该可以。