学 C 语言的小伙伴,是不是都遇过这种情况?语法书翻了好几遍,例题也看懂了,可自己一写代码,编译器就报错,红通通的警告一大片,盯着屏幕看半天,愣是找不出问题在哪儿。其实啊,不光是你,几乎所有学 C 语言的新手都会踩这些语法 “坑”。今天兔子哥就结合自己当年的踩坑经历,还有粉丝们常问的问题,跟大家聊聊新手最容易犯的语法错误,以及怎么避开它们,一起往下看吧!
变量定义了不用,或者用了没定义?这坑太常见!
你有没有试过,写代码时顺手定义了个变量,结果后面压根没用到;或者反过来,脑子里想着用某个变量,却忘了提前定义?之前有个粉丝跟我说,他写一个计算平均分的程序,明明在代码里写了 “sum = sum + score”,结果编译器一直报错,后来才发现,压根没写 “int sum;” 这行定义。
为啥会这样?主要是刚开始学编程,思路跟不上手速,要么边写边忘,要么定义的时候想当然觉得 “后面肯定能用着”。解决方法其实很简单:写代码前先在纸上列一列需要哪些变量,比如算平均分得有总分、数量、平均分这几个;写完一段就回头看看,有没有定义了没用到的变量,赶紧删掉,省得编译器警告。
分号!分号!分号总能忘,这到底为啥?
“expected ‘;’ before ‘}’ token” 这个错误,估计每个新手都见过吧?明明代码逻辑看着没问题,就是报这个错,查来查去,发现是某个语句末尾少了个分号。兔子哥刚开始学的时候,甚至有过在 for 循环后面漏写分号,结果程序直接卡死的经历。
你猜怎么着?这毛病跟我们平时说话习惯有关。平时说话停顿不用刻意加标点,可 C 语言里,分号就是语句的 “句号”,少了它编译器就不知道一句话在哪儿结束。解决办法也笨但管用:每次写完一行代码,下意识看一眼末尾有没有分号,尤其是 if、for、while 这些结构后面,虽然它们的条件后面不用分号,但结构体内部的语句千万别漏。
数组下标从 1 开始?这误会坑了多少人!
“我定义了 int a [5],存 a [5] 为啥会报错?” 这问题粉丝问过不下十次。其实啊,C 语言的数组下标是从 0 开始的,定义 a [5] 意味着能存 a [0] 到 a [4] 这 5 个元素,直接用 a [5] 就超出范围了,运行时可能啥提示都没有,但结果肯定不对,严重的还会让程序崩溃。
之前有个同学做成绩统计,数组定义成 a [30],却往 a [30] 里存数据,程序运行时成绩总是少最后一个,查了半天才发现是下标搞错了。所以记住喽:数组下标从 0 开始,定义多大的数组,最大下标就是 “大小减 1”,写循环遍历数组时,条件别写成 i <= n,应该是 i < n 才对。
指针乱用变 “野指针”,程序崩溃没商量
指针这东西,学起来头疼,用错了更头疼。新手最容易犯的就是 “野指针” 问题:要么定义了指针没给它赋值就直接用,要么用了已经释放内存的指针。有个粉丝跟我说,他写了个程序,定义了 int p; 然后就用p = 10; 结果程序一运行就崩溃,问我咋回事。
这就是典型的野指针,指针 p 没指向任何有效内存,就像拿着钥匙瞎开门,不崩溃才怪。解决方法很简单:指针定义后要么马上让它指向一个已有的变量,比如 int a; int *p = &a 要么暂时不用就赋值为 NULL,用之前先检查是不是 NULL。还有啊,用完动态分配的内存要记得释放,但释放后别再用这个指针了,最好再赋值为 NULL。
最后说点个人心得吧。C 语言的语法错误看着五花八门,但其实翻来覆去就是那几种,踩的坑多了,自然就记住怎么避开了。别害怕报错,编译器的错误提示虽然有时候绕,但耐心找找总能发现问题。建议大家写代码时慢一点,写完一段就编译一次,有错及时改,比一口气写完再调试效率高多了。希望今天说的这些能帮到正在学 C 语言的你,少踩坑,学得更顺一点!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~