5.1 單項(xiàng)選擇題
1.設(shè)有定義“int a=3, b,*p=&a;”,則下列語句中使 b不為3的語句是( )
① b=* &a; ② b=* p;
③ b=a; ④ b=*a;
【解】定義有 int a=3, b,*p=&a;對b賦值的表達(dá)式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a。對于后者,又有多種表達(dá)方法,通過指向a的指針p,間接引用a的內(nèi)容,如*p;蛲ㄟ^求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用 a的內(nèi)容,如* &a。所以表達(dá)式*&a、*p和a都能引用變量a的值,而使b的值為3。而表達(dá)式。a是錯(cuò)誤的,因?yàn)閍不是指針變量,不能對它施行取內(nèi)容運(yùn)算符。。所以解答是④。
2 .設(shè)指針x指向的整型變量值為萬,則"printf("%d\n",++ *x);"的輸出是( )
① 23 ② 24 ③ 25 ④ 26
【解】若指針變量x指向某個(gè)變量,例如指向變量v,并且變量v的值是25,則表達(dá)式++ *x的值是26。這是因?yàn)楸磉_(dá)式的計(jì)算順序可加圓括號表達(dá)成(++(*x)),首先是*x,是對X所指變量V的引用,所以++ *X就是++V。++V是先讓變量V增1,并以增至后的V的值為表達(dá)式++V的結(jié)果,所以其值是 26。所以解答是④。
3.若有說明:“ int i,j= 7,*p=&i;”,則與“ i=j(luò);”等價(jià)的語句是( )
①i=*p; ②*P=* &j;
③i==&j; ④i=* *p;
【解】指針變量 p指向變量i時(shí),表達(dá)式i=*p等價(jià)于 i=i;表達(dá)式*p=*&j等價(jià)于i=j(luò);而表達(dá)式i=&j企圖將整型變量的指針賦給整型變量,這是錯(cuò)誤的;表達(dá)式i=* *p也是一種錯(cuò)誤的表達(dá)式。p是指針,*p是p所指變量j,* *p是企圖將整型變量j當(dāng)作指針,并想通過j間接引用某個(gè)變量。所以解答是②。
4.若有說明語句“int a[10],*p=a;”,對數(shù)組元素的正確引用是( )
①a[p] ②P[a]
③*(P+2) ④P+2
【解】在 C語言中,約定數(shù)組名單獨(dú)出現(xiàn)在表達(dá)式中時(shí),它表示數(shù)組首元素的指針。有int a[10] ,則a可以作為&a[0]使用。另有整型指針變量p,代碼p=a實(shí)現(xiàn)p指向數(shù)組a的首元素。則表達(dá)式*(p+2)是引用數(shù)組元素a[2]。表達(dá)式a[p]和p[a]都是不正確的,下標(biāo)必須是整型表達(dá)式,不可以是指針表達(dá)式。表達(dá)式p+2是指針表達(dá)式,它的值是&p[2]。所以只有表達(dá)式*(p+2)引用數(shù)組a的元素a[2]。所以解答是③。
5.下面各語句中,能正確進(jìn)行賦字符串操作的語句是( )
①char s[5] ={"ABCDE"}; ②char s[5] ={’A’,’B’,’C’,’D’,’E’};
③ char *s;s="ABCDE"; ④ char *s;scanf("%", s);
【解】字符串最終存儲于字符數(shù)組中,存儲字符串的字符數(shù)組可以是程序主動引入的(定義或動態(tài)分配),也可以是字符串常量,由系統(tǒng)分配。其中字符數(shù)組用字符串初始化就是字符串存儲于由程序引入的字符數(shù)組的例子。給字符指針賦字符串則是系統(tǒng)自動分配字符率存儲空間的例子。給字符指針賦字符串并不是將一個(gè)長長的字符串存于字符指針變量中,而是將字符串常量存儲于常量區(qū),并將存儲這個(gè)字符串的首字節(jié)地址賦給指針變量,讓指針變量指向字符率常量的首字符。對于以字符串作為字符數(shù)組初值的情況,要求字符數(shù)組足夠的大,能存得下字符串常量。這里有一個(gè)特別的規(guī)定,若數(shù)組的大小少于存儲字符串有效字符的字節(jié)個(gè)數(shù),系統(tǒng)將報(bào)告錯(cuò)誤;當(dāng)字符數(shù)組的大小只能存儲字符串的有效字符,而不能存儲字符率結(jié)束標(biāo)記符時(shí),則存儲于字符數(shù)組中的內(nèi)容是字符序列,因沒有存儲字符率結(jié)束標(biāo)記符,存儲的內(nèi)容就不是字符串。如代碼char a[5]="ABCDE"。另外,給字符數(shù)組元素逐一賦字符初值,并在字符初值中沒有字符串結(jié)束標(biāo)記符,則存于字符數(shù)組中的內(nèi)容也不是字符率。如代碼 char s[5]={’A’,’B’,’C’,’D’,’E’}。特別要注意當(dāng)字符指針還未指向某個(gè)字符數(shù)組的元素時(shí),不可以通過字符指針輸入字符串。如代碼char *s;scanf("%s",s)。若寫成char *str;scanf("%s",&str)更是錯(cuò)誤的了。由于C語言規(guī)定數(shù)組不能相互賦值,所以只能將字符串常量賦給某字符指針。如代碼char *s;s="ABCDE"是正確的。實(shí)際上,字符率"ABCDE" 被存儲于常量區(qū)中,向指針變量賦的是字符指針,讓s指向其中的字符’A’。所以解答是③。
6.若有以下定義,則不能表示a數(shù)組元素的表達(dá)式是()
int a[10]={1,2,3,4,5,6,7,8,9,1o},*p=a;
①*p ② a[10] ③*a ④ a[p-a]
【解】上述代碼定義了有10個(gè)元素的整型數(shù)組。,和定義指針變量p,并讓p指向數(shù)組元素a[0]。所以代碼*p是引用 a[0]。由于數(shù)組a只有10個(gè)元素,最后一個(gè)元素是a[9],表達(dá)式a[10]是錯(cuò)誤的。數(shù)組名a可以作為a的首元素的指針,表達(dá)式*a就是a[0] ,是對數(shù)組a的首元素a[0]的引用。指針p的值是a,表達(dá)式p-a。的值是0,所以a[p-a]就是a[0]。所以解答是②。
7.若有以下定義,則值為3的表達(dá)式是()
int a[]= {1,2,3,4,5,6,7,8,9,10},*p=a;
①p+=2,*(p++) ③p+=2,* ++p
③p+=3,*p++ ④ p+=2,++ *p
【解】數(shù)組a有10個(gè)元素,分別有值1至10,指針變量p指向a[0] ①逗號表達(dá)式 p+=2,*(P++),先是P+=2使P指向a[2],接著是*(P++),以當(dāng)時(shí)P所指變量a[2]取內(nèi)容3為表達(dá)式的值,同時(shí)使p指向a[3]。②返號表達(dá)式p+=2,* ++p,先是p+=2使p指向a[2],以后是* ++p,又使 p增1,讓它指向a[3],并取指針p所指變量a[3]的內(nèi)容4作為表達(dá)
式的值。③逗號表達(dá)式 p+=3,*p++,先是p+=3使p指向a[3],以后是*p++,表達(dá)式的值是 a[3]為 4,而使p指向a[4]。④逗號表達(dá)式p+=2,++ *p,先是p+=2,使p指向a[2],以后是++ *p,因當(dāng)時(shí)的*p就是 a[2],++a[2]使a[2]增1,變成4,并以4為表達(dá)式的值。所以只有p+=2,*(p++)的值是3。所以解答是①。
更多軟考資料請?jiān)L問:考試吧軟件水平考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |