c语言的避雷针之指针习题精选

来源:互联网 发布:欧洲审美知乎 编辑:程序博客网 时间:2024/05/16 17:05

指针在c语言的领域里是一个非常神秘的部分,最简单的指针也许就是“int*pi”,下面给大家一些指针的经典练习题,供大家进一步熟悉它的魅力~每题下面都有附答案,供大家参考。

若有定义:int x,*pb; 则以下正确的赋值表达式是( )
*pb&x;
pbx;
pb&x;
*pb*x;
参考答案
C

执行以下程序后,a的值为
main()
{ int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+7;
printf(“a%d\n”,a);
printf(“b=%d”,b);
}

1
1
0
4
参考答案
C

下面程序中调用scanf 函数给变量a输入数值的方法是错误的,其错误原因是()
main()
{ int *p,q,a,b;
p&a;
scanf(“%d”,*p);
……
}

*p表示的是指针变量p的地址;
*p表示的是变量a的值,而不是变量a的地址
*p表示的是指针变量p的值
*p只能用来说明p是一个指针变量
参考答案
B

若有int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的语句是()

k*ptr1+*ptr2;
ptr2k;
ptr1ptr2;
k*ptr1*(*ptr2);
参考答案
B

若有c语言语句int *point a=4;和point &a;下面均代表地址的一组选项是( )

a,point,*&a
&*a,&a,*point
*&point,*point,&a
&a,&*point,point
参考答案
D

若有说明:int *p,m=5,n;下面正确的程序段是

p&n; scanf(“%d”,&p);
p&n;scanf(“%d”,*p);
scanf(“%d”,&n); *pn;
p=&n;*p=m;
参考答案
D

设char *s=”\ta\017bc”;则指针变量s指向字符串所占的字节数是

9
5
6
7
参考答案
C

下面程序段中,for循环的执行次数是( )
char *s”\ta\018bc”;
for( ; s!’\0’;s++) printf(“*”);

9
5
6
7
参考答案
C

下面能正确进行字符串赋值操作的是

char s[5]{“ABCDE”};
char s[5]{‘A’,’B’,’C’,’D’,’E’};
char *s s"ABCDE";
char *s; scanf(“%s”,s);
参考答案
C

在C程序中,指针变能够赋__1__值或__2__值。

参考答案

1:地址

2:NULL

有以下程序
   void f( int y,int *x)
    {y=y+*x; *x=*x+y;}
     main( )
     { int x=2,y=4;
       f(y,&x);
       printf(“%d %d\n”,x,y);
    }
  执行后输出的结果是__1__.

参考答案

1:8 4

设有定义:int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。
  scanf(“%d, ”__1__ );
  printf(“%d\n”, __2__。);

参考答案

1:k

2:*k

设有以下程序:
  main()
  { int a, b, k=4, m=6, *p1=&k, *p2=&m;
   a=pl==&m;
   b=(*p1)/(*p2)+7;
   printf(“a=%d\n”,a);
   printf(“b=%d\n”,b);
  }
  执行该程序后,a的值为__1__ ,b的值为__2__.

参考答案

1:0

2:7

若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 __1__ 。
   int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;

参考答案

1: P[5]  或  *(p+5)

若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。

 a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 22 │ 33 │ 44 │ 55 │ 66 │
└──┴──┴──┴──┴──┘

1,若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最后一个存储单元a[4]的语句是
__1__2,若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是__2__.

参考答案

1: s=p+3

2:2

下面程序的执行结果是
char str[]=”abc\0def\0ghi”,*p=str;
printf(“%s”,p+5);

参考答案
ef

下面程序段的执行结果根据c语言特点正确的是_________________________。
char a[]”123456789”,*p;
int i0;
pa;
while( *p)
{ if( i%2==0) *p=’*’;
p++; i++; }
puts(a;

参考答案
*2*4*6*8*

下面程序的的输出结果是
#include “stdio.h”
s(char *s)
{ char *ps;
while(*p) p++;
return(ps); }
main()
{ char *a”abcded”;
int i;
i=s(a);
printf(“\n%d”,i);
}

参考答案
6

#include
main( )
{ char *t=”23142”;
int a=0,b=0,c=0,d=0,i;
for(i=0;t[i];i++)
switch(t[i])
{ case’1’ : a++;
case’2’ : b++;
case’3’ : c++; break;
default : d++;
}
printf(“%d,%d,%d,%d\n”,a,b,c,d);
}
参考答案
1,3,4,1

#include
main()
{ int array[6],*parray,i;
for(i=0;i<6;i++)
array[i]=i+1;
parray=array;
for(i=0;i<6;i++)
printf(“*(parray+%d)=%d\n”,i,*(parray+i));
}

参考答案
*(parray+0)=1
*(parray+1)=2
*(parray+2)=3
*(parray+3)=4
*(parray+4)=5
*(parray+5)=6

在主函数中输入8个整数,调用函数对其进行排序(从小到大),排序方法不限,最后在主函数中输出结果。

main()

int i,n,digit[20],*p;

   printf("please input integer's numbers:");

   scanf("%d",&n);

   printf(“\nplease input %d integers:\n",n);

   for(i=0;i

     scanf("%d,",&digit[i]);

   scanf("%d",&digit[i]);

   p=digit;

   sort(p,n);

   printf("sorted %d integers are:\n",n);

   for(i=0;i

     printf("%d ",digit[i]);

   printf("\n");

 }

 

 sort(p,n)

  int *p,n;

 {

    int i,j,temp;

    for(i=0;i

    {

       for(j=i+1;j

       {

         if(*(p+i)>*(p+j))

         {

            temp=*(p+i);

            *(p+i)=*(p+j);

            *(p+j)=temp;

          }

        }

     }

   }

通过指针将一个字符串反向。

#include

void main()

  char ch[128],c,*cp1,*cp2;

    int i,n = 0;

    gets(ch);

    cp1 = ch;

    cp2 = ch;

    while(*cp2!= 0)

     n++;

        cp2++;

    }

    cp2--;

    n = n/2;

    for(i = 0;i

     c = *cp1;

        *cp1 = *cp2;

        *cp2 = c;

        cp1++;

        cp2--;

    }

    puts(ch);

}