指针练习题
1 填空题
【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add( int x, int y, ) { =x+y;} 【2】若有定义: char ch;
(1) 使指针p 可以指向变量ch的定义语句是 。 (2) 使指针p指向变量ch的赋值语句是 。
(3) 通过指针p给变量ch读入字符的scanf函数调用语句是 。 (4) 通过指针p 给变量ch赋字符A的语句是 。 (5) 通过指针p输出ch中字符的语句是 。
(6) 在16位微机上,指针变量p在内存中所占字节数是 ,变量ch在内在所占字节数是 。
2 选择题
【3】若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是( )。
A.i=*p; B.*p=*&j; C.i=&j; D.i=**p; 【4】若有定义:int x,*pb;则正确的赋值表达式是( )。
A.pb=&x B.pb=x C. *pb=&x D.*pb=*x 【5】对于类型相同的指针变量,不能进行的运算是( )。
A.< B. = C. + D. – 【6】以下程序的输出结果是( )。
A.23 B. 24 C. 25 D. 26 Void fun ( int *x)
{ printf(%d\\n”,++*x); } main( )
{ int a=25; fun (&a); }
【7】以下程序的输出结果是( )。
A.6 B. 7 C. 8 D. 9 main() { int k=2,m=4,n=6; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(\}
【8】以下程序的输出结果是( )。
A.100 B. 50 C. 101 D.200 main() {
int *v,b;
v=&b; b=100; *v+=b;
printf(\}
【9】以下程序的输出结果是( )。
A.2,3 B. 6,2 C. 3,2 D. 2,6 int ast(int x,int y,int *cp,int *dp) {
*cp=x*y; *dp=x%y; }
main() {
int a,b,c,d; a=2;b=3;
ast(a,b,&c,&d);
printf(\}
【10】以下程序的输出结果是( )。
A.1,3 B. 2,3 C. 1,6 D.2,6 main() {
int a[]={1,2,3,4,5,6},*p; p=a;
*(p+3)+=2;
printf(\}
3 改错题 【11】main( )
{ int a=1,b=2;
printf(“a=%d b=%d\\n”,a,b); swap(a,b);
printf(“a=%d b=%d\\n”,*a,*b); }
swap ( int *p1, int *p2) {
int *p;
*p=*p1; *p1=*p2;*p2=*p; }
【12】void add (int a,int b,int c)
{ c=a+b;
return c; }
main( )
{ int *ap,*bp,a,b,c; ap=&a,bp=&b;
scanf(“%d %d”,&ap,&bp); add(ap,bp,c); printf(\}
4 读程序写结果 【13】main() {
static int a[ ][3]={{1,2,3},{4,5},{6}}; int i,*p=a[0]; int (*q)[3]=a; for(i=0;i<3;i++)
printf(\ printf(\ for(i=0;i<3;i++)
printf(\ printf(\}
【14】main() {
int a=10,b=20; void test( );
printf(\ test(a,&b);
printf(\}
void test(int x,int *y) {
int t;
t=x;x=*y;*y=t; }
【15】#define PRINTA printf(\#define PRINTB printf(\void swap(int *p,int *q) {
int t;
t=*p;*p=*q;*q=t; }
main( )
{
int a=1,b=2,*pa=&a,*pb=&b; PRINTA PRINTB
swap(pa,pb); PRINTA PRINTB }
【16】main() {
int a[]={1,2,3,4,5,6,7,8,9}; int *p=a,i,t;
for(i=0;i<9/2;i++) {
t=*(p+i);
*(p+i)=*(p+8-i); *(p+8-i)=t*10; }
for(i=0;i<9;++i) printf(\}
【17】#include \sub1(char *a,char b)
{char c;c=*a;*a=b;b=c;} sub2(char a,char b)
{char c;c=a;a=b;b=c;} sub3(char *a,char *b)
{char c;c=*a;*a=*b;*b=c;} main() {
char a,b;
a='A';b='B';sub3(&a,&b);putchar(a);putchar(b); a='A';b='B';sub2(a,b);putchar(a);putchar(b); a='A';b='B';sub1(&a,b);putchar(a);putchar(b); }
【18】void exc(int *i,int *j) {
int k;
k=*i;*i=*j;*j=k; }
void opr(int x,int y,int *z) {
exc(&x,&y);*z=x%y; }
main() {
int a=89,b=10,*c; c=&a;
opr(a,b,c);
printf(\}
【19】main() {
int **k,*a,b=100; a=&b;k=&a;
printf(\}
【20】fun1(int x,int y,int *cp,int *dp) {
*cp=x+y;*dp=x-y; }
fun2(int *a,int b) {
int c;
c=*a;*a=b;b=c; }
main() {
int a,b,c,d; a=30;b=50;
fun1(a,b,&c,&d); fun2(&c,d);
printf(\}
【21】void sub(int x,int y,int *z) {*z=y-x;} main() {
int a,b,c; sub(20,15,&a); sub(a,9,&b); sub(a,b,&c);
printf(\}
【22】fun(int *a,int *b) {
int w; *a=*a+*a;