看判断那儿是不是不对
看视频作者的定义,在链表结构体中定义的next指针,这个next指针的类型就是自身结构体的类型,也就是说next++,会自动转到下一个结构体的头地址。
char name 根本放不了"xiong",溢出了都。 char 单字节,只能放一个byte
看着应该是对的
while(p=!NULL)应修改为:while(p != NULL)
while循环结束时给p赋值应为p = p -> next
p->name的数据类型为c,将%s改为%c即可
你执行的是sizeof(p)吗?
p 实际上只是一个 是指向 struct weapon{}的指针
内存为struc weapon{}结构体分配了:两个int型、一个指针类型。
因此strut weapon所占空间为4+4+8 =16
sizeof(p)的值为16
没毛病
懂了吗
应该差不多吧?但是可能有些东西是新的而已 你们大学没学到而已
是的,自己试试就知道了,不过要写为struct weapon weapon1={1,2};&weapon1.a和&weapon1
你把struct weapon *p你把它换成int *p,你看懂吗?定义struct类型的地址,其实struct也是一种类型了,C语言中给出了另一种构造数据类型——“结构”,不能只有int啥的是类型,struct也是类型。
你是直接打印的next的地址啊,计算机怎么知道你要打印哪个结构体的next?修改为p &a.next
按我的理解结构体指针传递的应该是结构体的首地址,你把p++后指向的是12个字节后的地址,并非下一个节点的首地址,而是下一个节点的指针地址,肯定无法读出数据,你可以试试在创建结构体的时候将指针写在第一个位置,等同于结构体首地址,应该可以。
#include <stdio.h>
struct nam
{
char *name[20]; //用指针
int old;
float height;
struct nam * next;
};
int main()
{
struct nam a,b, *head;
a.name[0]="李"; //第一个地址
a.old=16;
a.height=70.2;
b.name[0]="林";
b.old=21;
b.height=65.3;
head=&a;
a.next=&b;
b.next=NULL;
struct nam *w;
w=head;
while (w!=NULL){
printf("姓名:%s\n年龄:%d\n身高:%f\n",w->name[0],w->old,w->height); //把地址取出来
w=w->next;
}
return 0;
}
//我就想到这个办法能打印名字出来
如果你不想使用P,可以直接用head来代替p,我试过结果一样