1 回答

TA貢獻883條經(jīng)驗 獲得超454個贊
你細想一下:你在前面回復(fù)中的說法和題目中 C 選項是一樣的邏輯。如我在前面回答中指出的,我覺得 C 選項的說法是不嚴謹?shù)摹?/p>
我再多說一些吧:
首先“有效”這個詞就不嚴謹,C 語言中沒有一個叫作“有效”的概念。
C 語言的標(biāo)識符(或者我們簡化一下,就看作是變量名)有個叫“作用域”的概念(這個你肯定知道)
C 語言的對象(或者我們就看作是變量名所代表的實際變量)有個叫“生存期”的概念(我想這個你至少也聽說過)
我不知道你有沒有區(qū)分過這兩個概念?? ?或者你會不會覺得我說的這兩個概念難道不是一回事嗎? 標(biāo)識符、對象、變量這三個名詞難道不是一回事嗎?? 我們不是常說“變量的作用域”、“變量的生存期”嗎......? ?它們當(dāng)然不一樣。 事實上 C 語言中并沒有真正定義“變量”這個名詞。
先說說“標(biāo)識符”和“對象”吧:
如我前面所說,在題目提到的情形中,所謂“標(biāo)識符”其實就是變量名(注意是名字),而“對象”指的就是變量名所代表的“東西”(抱歉這里我不能用“變量”一詞)? ?我不是在咬文嚼字,細想一下,它們的含義確實是有區(qū)別的。下面用代碼舉些例子
int a;? ?這是非常簡單的語句,我們常說這是“聲明(也是定義)了 int 變量 a”。
其實嚴謹?shù)慕庹f是:a 這個名字就是標(biāo)識符,a 所代表的是一個 int 對象。 注意:我并沒有用“變量”一詞,這個詞更像是一種籠統(tǒng)的俗稱。? 必須要說“變量”一詞并不是錯誤的稱呼,在不需要明確區(qū)分標(biāo)識符和對象時,我們當(dāng)然可以說這是“聲明(也是定義)了 int 變量 a”。
而下面的代碼就需要區(qū)分標(biāo)識符和對象了:
{ ????... ????int?a; ???? ????for?(;;)?{??//?這里是不是?for?語句并不重要,重要的是這對大括號構(gòu)成的語句塊 ????????double?a; ????} }
這段代碼中存在兩個對象:int 型的和 double 型的,但只有一個標(biāo)識符 a!
前面說過,標(biāo)識符有個叫“作用域”的概念,它表示這個名字的“可見”范圍。而對象有個叫“生存期”的概念,它表示對象實際占用存儲空間的存續(xù)期,或者說在哪個范圍內(nèi)對象是存在的。關(guān)鍵是作用域和生存期的范圍不一樣:
標(biāo)識符作用域的范圍是從聲明處起,至所在語句塊結(jié)尾處止。
對象生存期的范圍是從所在語句塊起始處起,至所在語句塊結(jié)尾處止。
那么,第 3 行的標(biāo)識符 a 的作用域是從第 3 行到第 8 行大括號結(jié)尾。在這個范圍內(nèi) a 這個名字就表示這里定義的 int 對象。通俗的說法就是“變量 a 在這個范圍內(nèi)可見,在范圍外不可見”。
而這個 int 對象的生存期是從第 1 行的大括號起,到第 8 行大括號為止。在這個范圍內(nèi) int 對象實際存在。
仔細看上面這兩句話你會發(fā)現(xiàn),在第 2 行處,int 對象也存在?? 是的,這個位置在對象的生存期內(nèi),這時 int 對象已經(jīng)實際占用了內(nèi)存。 但是其名字 a 并不可見? 沒錯,在這時你還不能通過 a 這個名字來使用 int 對象。? 這也就是你再熟悉不過的那個通俗地說法“變量在聲明之后才可以使用”。
對于第 6 行。標(biāo)識符 a 在一個新的語句塊中,a 這個名字會“隱藏掉”塊外的同名。這里的 a 具有新的作用域,從第 6 行到第 7 行。也就是在這個范圍內(nèi)提到 a 這個名字,指的就是第 6 行的 double 對象了。 同理,double 對象的生存期是從第 5 行的大括號到第 7 行。
所以“變量”這個通俗的名詞在不同的語境下可能描述的是不同的概念。比如:
我說“第 3 行的 int 變量 a 在第 2 行無效”,其實描述的是“第 3 行的標(biāo)識符 a 的作用域”
我說“第 7 行之后 double 變量 a 就無效了”,其實描述的可能是“double 對象的生存期”
說回到本題:
從文字中我感覺得題目中的對“變量有效性”的探討指的是“標(biāo)識符的作用域”。
C 選項中的“本函數(shù)范圍”一詞十分模糊。我不知道它的意思是“本函數(shù)的整個范圍”,還是僅僅粗略地表示“在本函數(shù)范圍內(nèi)就算”。? ?因為標(biāo)識符的作用域是從聲明處開始的,肯定不是“函數(shù)的整個范圍”。? 如果認為這句話是粗略的說法,那還可以認為 C 選項是正確的。
D 選項的說法肯定是錯誤的。甚至即便題目中的“變量”指的是“對象的生存期”,D 也是錯誤的。
但你說答案是 C?!? 這就怪了。
如果認為 C 的意思是“函數(shù)整個范圍”,那 C 就算是錯誤的。但別忘了 D 也是錯誤的呀!? ?假若認為題目的“變量”指的是“生存期”,那 C 的說法反而是正確的了...
所以說...這題目又錯了吧...
P.S. 如果這是單選題,那我強烈地感覺答案應(yīng)該是 D。畢竟 D 的說法怎么樣都是錯誤的。我可以把 C 看作是種粗略的說法而將其認為是正確的。
- 1 回答
- 1 關(guān)注
- 1613 瀏覽
添加回答
舉報