指针在c语言的学习中是一个非常常用的部分,最简单的指针也许就是“int*pi”,下面给大家一些指针的经典练习题,供大家进一步熟悉它的魅力~每题下面都有附答案,供大家参考。
若有定义:int x,*pb; 则以下正确的赋值表达式是( )
A *pb=&x;
B pb=x;
C pb=&x;
D *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);
}
A -1
B 1
C 0
D 4
参考答案
C
下面程序中调用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是一个指针变量
参考答案
B
若有int
k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的语句是()
A k=*ptr1+*ptr2;
B ptr2=k;
C ptr1=ptr2;
D k=*ptr1*(*ptr2);
参考答案
B
若有c语言语句int *point
a=4;和point &a;下面均代表地址的一组选项是( )
A a,point,*&a
B &*a,&a,*point
C *&point,*point,&a
D &a,&*point,point
参考答案
D
若有说明:int *p,m=5,n;下面正确的程序段是
A p=&n;
scanf(“%d”,&p);
B p=&n;scanf(“%d”,*p);
C scanf(“%d”,&n);
*p=n;
D p=&n;*p=m;
参考答案
D
设char
*s=”\ta\017bc”;则指针变量s指向字符串所占的字节数是
A 9
B 5
C 6
D 7
参考答案
C
下面程序段中,for循环的执行次数是( )
char *s=”\ta\018bc”;
for( ; s!=’\0’;s++)
printf(“*”);
A 9
B 5
C 6
D 7
参考答案
C
下面能正确进行字符串赋值操作的是
A char
s[5]={“ABCDE”};
B char
s[5]={‘A’,’B’,’C’,’D’,’E’};
C char *s
s="ABCDE";
D 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 i=0;
p=a;
while( *p)
{ if( i%2==0) *p=’*’;
p++; i++; }
puts(a);
参考答案
*2*4*6*8*
下面程序的的输出结果是
#include “stdio.h”
s(char *s)
{ char *p=s;
while(*p) p++;
return(p-s); }
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);
}