*start++右至左结合的意思是start先与++结合,而不是先与*结合,用括号表示,就是*start++相当于*(start++),而不是(*start)++。结合性影响的是表达式的语义。
*(start++)先求表达式start++的值再对其解引用。start++是一个表达式,它的值等于start变量的当前值,这是后缀++的运算规则。所以,当start为拿族n时,start++的值也为n。*start++的结果就是*n。对表达式start++求值还会导致start的值增加1,所以在start++求值之后吵竖的某一个时间点,start变量的值会变成n+1,这称为表达式的副作用。表达式的值和副作用也是完全不同的两个概念。
/*收集并存储信息*/
从while循环开始讲吧, 程序要你输入一个电影名, 当gets()函数返回值不为NULL并且输入的字符串的首元素不为空字符时,进入循环体
接着用malloc()函数分配film结构空间,并让结构指针current指向它
首次循环时head = NULL, 所以头指针指向了current, 接着让current->next的虚渗值为NULL, 表示暂无下一部影片
然后调用strcpy()函数将input字符串即电影名复制到结构成员current->title中
接着让你输入影片评分,将值放进current->rating中
第二个while循环清空输入行
程序提示输入下一部影片, 然后让结构指针prev指向current
第一次循环结束,head和prev都指向current
当输入的第二个电影名符合while()循环条件,程序继续执行循环体
这里不同的是分支语句, 这次head的值不再是NULL,所以让成员prev->next(这个握并值前面已经设置为NULL)指向了新分配的内存
/*给出电影列表*/
如果执行到head仍为NULL,则无电影输入
否则将打印输入的电影列表
让结构指针current指向头指针head
当while循环判断current != NULL, 即current不等于空指针时,从头指针开始打印信息, 然后让current->next赋值给current,让current指向下一个结构, 继续打印电影信息
/*任务已完成, 因此释放所分配的内存*/
原代码为:
current = headwhile (current != NUll)
{
free(current)
current = current -> next
}
是错误的
因为当free了current的空间时,将不能再把current->next赋给current, 它们所处的内存已被释放
正确代码为:
current = head
while(current != NUll)
{
prev = current->next
差皮脊 free(current)
current = prev
}
有不懂的可以继续追问
头文件加上#include<stdlib.h>return 0上面加上一句 system("pause")
这样应该可以了。
楼上说的销档对,但是如果用ctrl+F5运行的话,不需要cin.get()或system("pause")也可以不闪退
可见书的作者的编译器跟你不一样,vs2005或2008应该都是跟书上结果一样的,这属于编译器
不同的问题,只要知道如何解决耐陆问题就可以亏亩乱了,不必太纠结。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)