【C語言】數(shù)組挖的坑,中招的舉個(gè)爪!
從大學(xué)修過C語言基礎(chǔ)這門課后,每每看到諸如變量、數(shù)組、結(jié)構(gòu)體這些東西時(shí),總覺得自己已經(jīng)掌握了,沒必要重點(diǎn)學(xué)習(xí)。知道今天看到QQ群有位老鐵跑出這么個(gè)問題,如下圖:

仔細(xì)瞅了瞅,發(fā)現(xiàn)這個(gè)問題貌似觸及到了我的知識(shí)盲區(qū)。于是跑去查了下資料,這里說一下我的成果:
首先,要區(qū)分兩個(gè)概念,那就是左值與右值。何謂左值,?賦值運(yùn)算符左邊的即為左值,何謂右值,賦值運(yùn)算符右邊的稱為右值。可以表示為:左值 = 右值。左值呢一般為具體的某塊內(nèi)存,右值則是內(nèi)存中存儲(chǔ)的數(shù)據(jù)。
然后回到我們的問題中,在程序中,主函數(shù)將數(shù)組mac的首地址傳給func函數(shù),程序原作者希望調(diào)用func函數(shù),完成將字符串"1234"賦值給數(shù)組mac的前四個(gè)元素的工作。為什么程序最終沒能實(shí)現(xiàn)該目的呢?我認(rèn)為有如下幾個(gè)原因:
1、c語言規(guī)定,對(duì)數(shù)組的操作不能整體進(jìn)行,必須單個(gè)元素操作。
2、數(shù)組的地址是由編譯器編譯時(shí)直接給定的,數(shù)組變量的變量名與此地址直接綁定,也就說數(shù)組mac的首地址是一個(gè)常量,它不能作為左值,即不能對(duì)數(shù)組的地址進(jìn)行變更,強(qiáng)行變更將會(huì)導(dǎo)致變更失敗。
所以這個(gè)程序中,強(qiáng)行將字符串"1234"的首地址賦值給mac的首地址(常量),就導(dǎo)致了最終運(yùn)行結(jié)果的失敗。