曹雁 湖北職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院
關(guān)鍵字:指針 自增自減
指針是C語言的重要概念之一,利用指針可以簡化程序,簡化字符串和數(shù)組的操作,解決了函數(shù)調(diào)用多個返回值的問題,能夠直接訪問內(nèi)存地址,提高了程序的運行效率、節(jié)省了內(nèi)存。自增、自減運算符也是C語言的重要的、非常實用的運算符,用法靈活。指針是C語言的難點和重點,而和自增、自減運算符相結(jié)合雖然使用簡單靈活,但是學(xué)生普遍反映不太理解、更不會使用,稍不注意就會出錯。本文結(jié)合作者多年的C語言教學(xué)和軟件開發(fā)經(jīng)驗,解析指針和自增、自減運算符的結(jié)合使用。
自增自減運算符++和--表示對變量本身的值加1和減1,但根據(jù)是否先引用再改變變量的值,又有兩種使用方法,分別是前置模式和后置模式。前置模式是先運算再引用,后置模式是先引用再運算。舉例說明:
分析上述代碼段,第二行代碼是自增運算符的前置模式,也就是先將變量a的值加1,然后賦值給變量b,即該行執(zhí)行完畢后,變量a和b的值都是5。第三行代碼是自增運算符的后置模式,也就是先將變量a的值賦值給變量c,再將變量a的值加1,即該行執(zhí)行完畢后,變量a和c的值分別是6和5。
案例1:使用指針訪問一維數(shù)組
分析上述代碼,函數(shù)scanf()調(diào)用需要提供輸入數(shù)據(jù)的地址,指針變量p用于保存數(shù)組的首地址,p++使得循環(huán)過程中p不斷指向下一個元素。
*p++表達式結(jié)合過程為*(p++),先取p指向的元素的值,再將該指針變量p自增,也就是先*p,然后p++,使p后移。這里學(xué)生容易出錯。
案例2:統(tǒng)計字符串中的“*”的個數(shù)
上述程序運行結(jié)果不正確,主要在于語句①中的p++,實際運行過程中,while表達式先使用p所指向的變量的值,再將p向前移動一個元素。語句②中的p和語句①的p顯然已經(jīng)不是同一個值,結(jié)果自然就不對了。更正時只要將語句①的*p++更改為*p,然后在while循環(huán)體內(nèi)增加p++語句。
指針和自增自減運算符的結(jié)合使用是一把雙刃劍,一方面簡化了表達式,為程序設(shè)計帶來了很大的便利,但同時由于運算符優(yōu)先級和結(jié)合性以及指針的復(fù)雜性,稍微不注意就會出錯,并且錯誤很隱蔽。本文根據(jù)多年的教學(xué)經(jīng)驗和積累,總結(jié)了C語言中指針和自增自減運算符的使用規(guī)律、展示了常見的使用錯誤并進行了分析。