C Primer Plus程序清单10.11的一个问题

C Primer Plus程序清单10.11的一个问题,第1张

运算符的结合顺序与表达式的求值是两个概念,请务消碰弊必分清楚。

*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 = head

while (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应该都是跟书上结果一样的,这属于编译器

不同的问题,只要知道如何解决耐陆问题就可以亏亩乱了,不必太纠结。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12458416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存