7.設(shè)有以下定義和語句,則*(*(p+2)+l)的值為__________.
int a[3][2]={10,20,30,40,50,60},(*p)[2];
p= a;
「解」上述代碼定義3行2列的二維數(shù)組a ,定義指向兩個(gè)元素的一維數(shù)組指針p,并讓p指向二維數(shù)組a的首行。則代碼*(*(p+2)+l)中的p+2指向二維數(shù)組a的第2行a[2],*(p+2)指向a[2][o],*(p+2)+l指向a[2][l],*(*(p+2)+l)是引用a[2][l],其值是60.
8.以下程序的功能是從鍵盤上輸入若干個(gè)字符(以回車符作為結(jié)束)組成一個(gè)字符串存入一個(gè)字符數(shù)組,然后輸出該字符數(shù)組中的字符串。請?zhí)羁铡?/p>
# include
# include
main()
{ char str[81],*sptr;
int i;
for(i=0;i 80;i++)
{ str=getchar();if(str==‘\n’) break;}
str=____________;
sptr=str;
while(* sptr) putchar(* sptr______________);
}
「解」從鍵盤輸入字符行,通過循環(huán)逐一輸入字符,當(dāng)發(fā)現(xiàn)輸入字符是換行符時(shí),結(jié)束循環(huán)。為了使輸入的字符列變成字符串,必須在輸入字符列之后,原存儲換行符的元素改為存儲字符串的結(jié)束標(biāo)記符,需用代碼 str=‘\0’ ,所以在第一框填入代碼‘\0’。當(dāng)要將存于字符數(shù)組str中的字符串通過循環(huán)逐一輸出字符串的字符時(shí),可以用字符指針sptr,讓sptr遍歷整個(gè)字符串,每次循環(huán)時(shí),輸出sptr所指字符,并讓sptr增1,即可用代碼*sptr++實(shí)現(xiàn),所以在第二框填入代碼++.
5.3 程序分析題
1.閱讀下列程序,寫出程序的輸出結(jié)果。
main()
{char *a[6]={“AB”,“CD”,“EF”,“GH”,U“,”KL“};
int i;
for(i=0;i 4;i++) printf(“%s”, a);
printf(“\n”);
}
「解」程序定義了有六個(gè)元素的字符指針數(shù)組a ,數(shù)組a 的各元素指向字符率常量。
程序的for循環(huán)遍歷了a的前四個(gè)元素,用字符率輸出格式,輸出指針數(shù)組a前四個(gè)元素所指的字符串。所以程序輸出: ABCDEFGH.
2.閱讀下列程序,寫出程序的主要功能。
main()
{ int i,a[l0],*p= a[9] ;
for(i=0;i 10;i++) scanf(“%d”, d);
for(; p =a; p——) printf(“%d\n”,*p) ;
}
「解」程序定義了有10個(gè)元素的整型數(shù)組a,另定義指針變量p,并讓它指向a的最后一個(gè)元素a[9].執(zhí)行代碼的第一個(gè)循環(huán)是順序輸人數(shù)組a的10個(gè)元素。第二個(gè)循環(huán)利用指針p逆序遍歷數(shù)組a,將數(shù)組a的各元素逆序輸出。所以程序的功能是輸入10個(gè)整數(shù),并逆序輸出這10個(gè)整數(shù)。