- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言出错常见情况
25、不同类型的指针混用例如:main?(){char?x=3,*p1;int?*p2;p1=x;p2=p1;printf?(%d,%d,x,y);} 在上例中,设计者本意是想将指针p1所指的值赋p2,但是由于p1与p2所指向的类型不同,不能赋值。在赋值时必须进行强制类型转换。如:main?(){char?x=3,*p1;int?*p2;p1=x;p2=(int?*)p1;printf?(%d,%d,*p1,*p2);}指向不同类型的指针变量进行强制转换后赋值,在C中是常用的,例如,用malloc函数开辟的数据存储单元,函数的返回值是一个空指针(void),需要用强制转换成指向所需存储类型,如指向一个结构体,用以组成一个链表:struct?str???{???int?a;???struct?str?*next;???}*p1;/*???用户程序列??*/p1=(struct?str?*)malloc?(size_t,size)在ICCAVR中,malloc函数返回的是void类型的指针,将其强制转换为struct?str类型的结构体指针。 26、混淆数组与指针变量的区别例如:main?(){int?i,a[5];for?(i=0;i5;i++)????scanf?(%d,a++);} 在上例中,设计者意图通过a++的操作,引用a数组的不同元素。由于C规定数组名代表数组的首地址,它的值是一个常量,因此用a++是错误的。应改为用指针变量来实现,如:main?(){int?i,a[5],*p;p=a;for?(i=0;i5;i++)????scanf?(%d,p++);} 27、混淆结构体类型与结构体变量的区别例如:struct?worker???{???unsigned?char?num;???char?name[20];???};worker.num=1; 在上例中,只是说明了一种struct?worker的结构,但是C编译器并没有为这种类型的结构体变量开辟存储空间,因此不能对结构体类型赋值。应用该类型定义了一个结体类型的变量后,才能对这个变量赋值,应改为:struct?worker???{???unsigned?char?num;???char?name[20];???};struct?worker?work;work.num=1; 28.输入数据时,企图规定精度。scanf(%7.2f,a);这样做是不合法的,输入数据时不能规定精度。 29.忽视了while和do-while语句在细节上的区别。 (1)main() {int a=0,I; scanf(%d,I); while(I=10) {a=a+I; I++; } printf(%d,a); } (2)main() { int a=0,I; scanf(%d,I); Do {a=a+I; I++; } while(I=10); printf(%d,a); } 可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。 9、在不该加分号的地方加了分号#include?io8515v.h;由于伪指令不是C程序语句,因此后面不能加分号。初学者也常在判断语句的条件表达式后面加入分号,例如:main?(){unsigned?int?i,sum;sum=0;?for?(i=0;i10;i++);sum+=i;} 在上例中,在for的表达式后面中入分号,则C编译认为循环体是一个空操作,这与设计者的本意不符。 10、对应该有花括号的复合语句,忘记加花括号例如:unsigned?char?i=1;unsigned?int?sum=0;while?(i=100)????sum=sum+i;????i++; 我们在前面举过这个例子,应改为:unsigned?char?i=1;unsigned?int?sum=0;while?(i=100)????{????sum=sum+i;????i++;????} 11、括号不配对当一个复合语句中使用多层括号时,常会出现这类错误;也常出现大括号不配对的现象,都是粗心所致。例如:while?((c=getcha
文档评论(0)