1.設(shè)有代碼"int(*ptr)[10];”,其中的ptr是( )
①10個(gè)指向整型變量的指針
、谥赶10個(gè)整型變量的函數(shù)指針
、垡粋(gè)指向具有10個(gè)元素的一維數(shù)組的指針
④具有10個(gè)指針元素的一維數(shù)組
2.若有以下定義,則數(shù)值為4的表達(dá)式是( )
int w[3][4]={{0,1},{2,4},{5,8}},(* p)[4]= W;
、*w[1]+l ②p++,*(p+1) 、踳[2][2] ④p[1][1]
【解】代碼“int(*ptr)[10];”的分析過程是,因圓括號,括號內(nèi)的ptr先與字符*結(jié)合,字符*修飾標(biāo)識(shí)符ptr是一種指針;接著與后面的一對方括號結(jié)合,表示是這樣的一種指針,是指向一維數(shù)組的;再有方括號中的10,說明這種數(shù)組有10個(gè)元素。至此,ptr是指向含10個(gè)元素的一維數(shù)組的指針。最后,是最前面的int,表示數(shù)組元素是int類型的。所以,ptr是一個(gè)指向具有10個(gè)int型元素的一維數(shù)組的指針。所以解答是 ③。另外,要是①,10個(gè)指向整型變量的指針,就是一個(gè)指針數(shù)組,上述代碼應(yīng)寫成“int *ptr[10];”,即ptr是一個(gè)有10個(gè)指向整型變量的數(shù)組。要是②,返回值是指向10個(gè)整型變量的函數(shù)的指針,上述代碼應(yīng)寫成“int(* (*ptr)())[10];”,即ptr是指針,指向一種函數(shù),函數(shù)的返回值又是一種指針,指向10個(gè)元素的數(shù)組,數(shù)組的元素是整型的。下面的代碼是這樣的函數(shù)指針和函數(shù)的例子:
# include
int a[][10]={{1,2,3,4,5,6,7,8,9,0} ,{0,1,2,3,4,5,6,7,8,9} };
int(*(*ptr)(int))[10];
int(*f( int n))[10]
{return a+n;
}
void main()
{ int(*p)[10],*q;
ptr=f;/*讓ptr指向函數(shù)f*/
P=(*ptr)(0);
q=*p;
printf("%d\n", *p);
P=(*ptr)(l);
q=*p;
printf("%d\n", *q);
}
在上述代碼中,函數(shù)有一個(gè)int型的形參。要是④,其意義與①相同,上述代碼應(yīng)寫成“int* ptr[10];”,即 ptr是一個(gè)有10個(gè)元素的數(shù)組,數(shù)組元素是指向整型變量的指針。
【解】二維數(shù)組定義有多種賦初值的辦法,問題給出的代碼是按行給數(shù)組的部分元素賦初值。它們分別是w[0][0]=0.w[0][1]=1、w[1] [1]=2.w[1][1]=4,w[2][0]=5,w[2][1]=8。根據(jù)約定,未指定初值的元素自動(dòng)置全0值。指針變量p是一個(gè)指向具有四個(gè) int型元素的一維數(shù)組的指針,定義時(shí)的初值使它指向數(shù)組W的第一行。①的代碼,*w[1]+1中的W[l]是指向 w[l][0]的指針,*w[1] 就是w[1][0],其值是2,*w[1]+l的值是3。②的代碼是逗號表達(dá)式,“p++,*(p+1)”先使p指向數(shù)組w的第二行,*(p+l)中的 p+l是指向數(shù)組w的第三行,*(p+1)是指針值,指向數(shù)組w的第三行的第一個(gè)元素,即&w[2][0]. ③的代碼w[2][2]引用數(shù)組W第三行的第三列元素,其值是0。④的代碼p[1][l]引用數(shù)組W第二行的第二列元素w[1][1],其值是 4。所以解答是@。
相關(guān)推薦:考試吧策劃:2010年軟件水平考試完全指南北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |