
CH6-指针练习习题及答案.doc
11页 第六章指针练习题及答案一、填空题1、定义int a[]={1,2,3,4,5,6},*p=a;语句printf("%d",(*++p)++);的输出结果是( )2、以下程序的执行结果是( )main(){ char s[]="abcdefg"; char *p; p=s; printf("ch=%c\n",*(p+5)); }3、以下程序的执行结果是( )main(){ int a[][={1,2,3,4,5,6}; for(p=&a[5];p>=a;p--) printf("%d",*P); printf("\n"); }4、以下程序的执行结果是( )main(){ int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;for(i=0;i<4;i++) p[i]=&a[i*3];printf("%d\n",p[3][2]);}5、设包含如下程序的文件名为,编译后键入命令:myprog one two three,则执行结果是( )main(int argc,char *argv[]){ int i; for(i=1;i
10、若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是( ),*(a[1]+2)的值( )11、若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是( ),*(a+5)的值是( )12、若有以下定义和语句: int a[4]={0,1,2,3},*p; p=&a[2]; 则*--p的值是()13、若有以下定义和语句: int s[2][3]={0},(*p)[3]; p=s; 则(*(p+1)+2)的值是()14、若有定义:int a[2][3]={2,4,6,8,10,12}; 则a[1][0]的值是( ),*(*(a+1)+0)的值是( )15、若有定义:int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k;则下面程序段的输出是()for(k=0;k<3;k++) q[k]=&a[k*4]; printf("%d\n",q[2][3]);16、若有以下输入:1,2
main(){int a[2][3]={2,4,6,8,10,12} , (*p)[3],i,j;p=a; scanf("%d,%d",&i,&j); printf("%d\n",*(*(p+i)+j); )17、下面程序的运行结果是()main(){ char *a[]={"P","C","B","L"}, (* *p)[ ]; int j;p=a+3;for(j=3;j>=0;j--) printf("%s",*(p--));}18、以下程序的执行结果是()main(){ char *p1,*p2,str[20]="xyz"; p1="abcd"; p2="ABCD";strcpy(str+1,strcat(p1+1,P2+1)); printf("%s",str); }19、若输入的值分别是1 3 5,下面程序的运行结果是()main(){int a=0,i,*p,sum; p=&a; for(i=0;i<=2;i++) { scanf("%d",p); sum=s(p); printf("sum=%d,",sum); }}s(int *p){int sum=10; sum=sum+*p; return(sum); }20、下面程序段的运行结果是()char s[20]="abcd"; char *sp=s; sp++; puts(strcat(sp,"ABCD"));21、下面程序段的运行结果是()char a[]="12345",*p; int s=0;for(p=a;*p!='\0';p++) s=10*s+*p-'0'; printf("%d\n",s);22、下面程序段的运行结果是()char a[]="9",*p; int i=0; p=a;while(*p) {if(i%2==0) *p='*'; p++;i++; } puts(a);23、下面程序的运行结果是()。
main(){ char *str[]={"Pascal","C language","Dbase","Cobol"}; char **p; int k;p=str;for(k=0;k<4;k++) printf("%s,",*(p++)); }二、选择题1、以下程序的运行结果是()void sub (int x,int y,int *z) { *z=y-x;}main(){ int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c);}A) 5, 2, 3 B) -5, -12, -7C) -5, -12, -17 D) 5, -2, -72、执行以下程序后,b的值为()main(){int b,k=4,m=6,*p1=&k,*p2=&m; b=(-*p1)/(*p2)+7; printf("%d\n",b); }A)5 B)6 C)7 D)103、下面程序应能对两个整型变量的值进行交换。
以下正确的说法是()main(){int a=10,b=20; printf("%d,%d",a,b); swap(&a,&b); printf("%d,%d",a,b); }swap(int p,int q){ int t; t=p;p=q;q=t;}A)该程序完全正确B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句为变)即可D)以上说法都不正确4、设*p,i;以下正确的语句是()A)*p=&i; B)i=p; C)i=*p; D)p=2*p+1;5、设char s[10];int i=1;以下正确的表达式是()A)[i+2] B)*(s+i) C)*(&s+i) D)*((s++)+i)6、设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;以下对a数组的元素值不正确的引用是()A)a[p-a] B)*(&a[i]) C)p[i] D)*(a[0]+1)7、设有说明int(*ptr)[M];其中ptr是()。
A)M个指向整型变量的指针 B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每一元素只能指向整型量8、如下程序的执行结果是() main() { int i; char *s="a\\\\\n"; for(i=0;s[i]!='\n';i++) printf("%c",*(s+i)); }A)a B)a\ C)a\\ D)a\\\\9、有四组对指针变量进行操作的语句,以下判断正确的选项是()(1)int *p,*q;q=p; int a,*p,*q;*p=*q=&a;(2)int a,*p,*q;q=&a;p=*q; int a=20,*p;*p=a;(3)int a=b=0,*p;p=&a;b=*p; int a=20,*p,*q=&a;*p=*q;(4)int a=20,*p,*q=&a;p=q; int p,q;q=&p;A)(1)正确,其余错 B)(1),(4)正确,其余错C)(3)正确,其余错 D)以下结论都不正确10、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()main(){ int *p,*q,a,b; p=&a; scanf("%d",*p);........ }A)*p表示的是指针变量p的地址B)*p表示的是变量a的值,而不是变量a的地址C)*p表示的是指针变量p的值D)*p只能用来说明p是一个指针变量11、若有以下定义,则*(p+5)表示()。
int a[10],*p=a;A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值12、若有定义:int *p[4];则标识符p()A)是一个指向整型变量的指针 B)是一个指针数组C)是一个指针,它指向一个含有四个整型元素的一维数组D)说明不合法13、若有以下定义,且0<=i<6,则正确的赋值语句是()int s[4][6],t[6][4],(*p)[6];A)p=t; B)p=s; C)p=s[i]; D)p=t[i];14、若有定义:int a[4][6];则能正确表示a数组中任一元素a[i][j](此处0<=i<4,0<=j<6)地址的表达式是()A)&a[0][0]+6*i+j B)&a[0][0]+4*j+I C)&a[0][0]+4*i+j D)&a[0][0]+6*j+i15、以下选项中,对指针变量p的正确操作是()A)int a[5],*p;p=&a; B)int a[5],*p;p=a;C)int a[5];int *p=a=1000 D)int a[5];int *p1,*p2=a;*p1=*p2;16、若有以下定义,且0<=i<5,则对数组a元素的非法引用是()int a[5],*p=a;A)a[i] 。
