第十章指针
A部分(本、专科必做)
一、选择题
1、若有定义:int x,*pb;则以下正确的表达式是(A)
A、pb=&x
B、pb=x
C、*pb=&x
D、*pb=*x
2、以下程序的输出结果是(B)
A、因变量无定义输出不定值
B、0
C、-1
D、1
#include
void main()
{printf(“%d\n”,NULL);}
3、以下程序的输出结果是(B)
A、5,2,3
B、-5,-12,-7
C、-5,-12,-17
D、5,-2,-7 #include
void sub(int x,int y,int *z)
{*z=y-x;}
void main()
{
int a,b,c;
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);
printf(“%d,%d,%d\n”,a,b,c);
}
4、以下程序的输出结果是(C)
A、4
B、6
C、8
D、10
#include
void main()
{
int k=2,m=4,n=6;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf(“%d\n”,n);
}
5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(B)。
A、20
B、30
C、21
D、31
a[0] a[1] a[2] a[3] a[4]
10
20
30
40
50
(图一)
6、已知指针p的指向(图一)的a[1],则表达式*++p的值是(B)。
A、20
B、30
C、21
D、31
7、已知指针p的指向(图一)的a[1],则表达式++*p的值是(C)。
A、20
B、30
C、21
D、31
8、以下程序的输出结果是(D)。
A、23
B、24
C、25
D、26
#include
void prtv(int *x)
{printf(“%d\n”,++*x);}
void main()
{
int a=25;prtv(&a);
}
9、以下程序的输出结果是(B)。
A、运行出错
B、100
C、a的地址
D、b的地址
#include
void main()
{
int **k,*a,b=100;
a=&b;k=&a;
printf(“%d\n”,**k);
}
10、以下程序运行后,输出结果是(D)。
A) 8 B) 7 C) 6 D) 5
#include
ss(char *s)
{ char *p=s;
while(*p) p++;
return(p-s);
}
main()
{ char *a="abded";
int i;
i=ss(a);
printf("%d\n",i);
}
二、填空题
1、若有定义:char ch;
(1)使指针p指向变量ch的定义语句是char *p=&ch; 。
(2)若已定义char *p;,使指针p指向变量ch的赋值语句是p=&ch; 。(3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是scanf(“%c”,p); 。
(4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是*p=’a’; 。(5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是printf(“%c”,*p); 。
2、以下程序输出的是 C 。
void main( )
{ int i=3, j=2;
char *a="DCBA";
printf("%c%c\n",a[i],a[j]);
}
3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。
void exchange(int *x, int *y)
{ int t;
t=*y; *y= *x ; *x= t ;
}
B部分(本科必做)
程序填空:
1、下面程序的输出结果是 A B C D B C D C D D 。
char b[]="ABCD";
void main()
{ char *chp;
for(chp=b; *chp: chp+=2) printf("%s",chp);
printf("\n");
}
下面是一个字符串连接函数,请补充完整。
void mystrcat(char *s1,char *s2)
{
char *p,*q;
for(p=s1; *p ; p++ );
for( q=s2 ;*q;q++) *p++=*q ;
*p=’\0’;
}