可以啊
这样就空格了
scanf("%d $d",a, b);
您看是这样哈,
首先定义一个结构体,这个结构体 定义一个*head,然后,head = &a。那么其实就是让head的地址指向&a,您可以用gdb来看看具体的 地址信息,就明白了。
这是两个问题,首先head在n=1的时候就把p1赋值给它,相当于head指向链头;然后p2的两次赋值含义不一样,因为p2保存的是上一次的节点,p2->next=p1表示把上次保存节点的next指针指向这次分配的节点p1,p2=p1表示用p2把这次产生的节点p1保存起来。
大哥,你忘了给 p1->num 补上取地址运算符 &。即:
scanf_s("%d,%d",p1->num,&p1->garde);
应改为:
scanf_s("%d,%d",&p1->num,&p1->garde);
int main(){ struct weapon *l,*k; *l=create(); while(l->next!=NULL){ printf("%d,%d\n",l->price,l->atk); k=l->next; l=k; } printf("%d,%d\n",l->price,l->atk); return 0;
}
create前面加*代表这是一个指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针(即地址值)。
你的问题模棱两可,感谢老天爷,我还是理解了。
你是说,初始化了三个节点吧?或者说是初始化了节点中的三组值?
我两个种形式都回答一下吧。
以静态链表为例:
//创建节点
struct node{
int score;
char name;
int number;
double whatever;
int *pnext;
}n1, n2,n3;
//链表初始化
struct node *phead = &n1;
n1.pnext = &n2
n2.pnext = &n3;
n3.pnext = NULL;
那么,如果你现在在节点n1中输入了前三个值(第四个没有输入),那么答应前三个就行了啊:
printf(“%d\n%s%d”,n1.score, n1.name, n1.number);
如果三个节点的这三个变量都都要输出,你循环输出就行了呀:
struct node *pTmp = NULL;
struct node *pCur = &n1;
for( i = 0 ;i < 3; i++){
printf(“%d\n%s%d”,pCur->score, pCur->name, pCur->number);
struct node *pTmp = pCur->pnext; //取下一个节点
pCur = pTmp;
}
打字不易,我是NPU张小戈,请采纳。
看样子是内存溢出了,请贴代码
应该不用()也可以。
能具体点吗?
建议把i==1写成1==i,这种错误就可以避免了,至少系统会提醒你错了,不能给常量赋值,,,,,,,望采纳
“出现一个问题,导致程序停止正常工作”一般都是在 scanf()上或指针函数出了问题,请注意数值是否加了地址符号
可以,但是你必须从下一个节点开始
&少了
已解决,必须把create方法声明在main方法前面。。
因为你在scanf那里自己加了个回车,所以也要把回车输入
不可以 因为p1和p2的地址是相同的 原来的地址已经存储了一个节点的值 如果不重新分配地址 再次输入p1又会重新覆盖这个节点的值 就没有下个节点了 这是我自己的理解 谢谢
把 p=create(); 改成 p=create()->next; 就可以输出第二个节点了
每个指针在你赋值给它之前,它都需要有一个确定的指向地址.
如果你直接head = p1;
因为head没有确定的地址,运行时就会出现未知错误.好像这就是所谓的野指针.
加了head = NULL;就是为了给head一个确定的指向;
没学,看不懂哈哈
结构体定义语句后面没有加分号
scanf 和 printf 语句的数据输入之间没有加分隔符
建立链表时头指针head要为NULL
是为了不浪费内存,达到最优的效果。不用也可以,但是当数据多了会很占用内存。这就会牵扯到机器的性能了。
malloc返回的是开辟空间的首地址,他并不知道你放的是什么类型的东西,所以要用第一个括号中的内容强制转换指针类型为struct weapon*,和p1的类型转为一样,否则会警告指针类型不符合
sizeof运算符可以求类型所占空间大小比如sizeof(int),也可以求某个量的空间大小,比如struct weapon weapon1={......};可以用sizeof(weapon1)求他的大小,等于sizeof(struct weapon)
程序运行结束,系统会自动释放,所以不会错误,但是手动释放是个好习惯,可能老师忘了。。
不同的结构体元素有着不同的空间
不一定要free,在该程序结束后内存会自动释放。需要free的情况是在程序运行过程中,出现反复调用内存的情况,这时候为了提高效率,不再用到的内存就free掉