C语言指针-练习
复习题(二)
基础题
设有:int k[]={2,4,6,8,10,12}, *p=k+2;表达式 *(p+2)*p[2] 的值: 。
设有:int a[10], *p1, *p2; 则执行语句:p1=a; p2=&a[5]; 则p2-p1的值。
设有:int x[]={4,3,2,1},q,*p=&x[1];则执行语句:q=(*--p)++ ; 后;变量q的值为 。
设有:int *p, a=10, b=1; 则执行以下语句:p=&a; a=*p+b; 后;a的值为: 。
下列程序段的输出结果是 。
int k=1, j=2, *p=&k, *q=p;
p=&j;
printf("%d, %d",*p, *q);
设x为整型变量,p为指向整型的指针变量,则让p指向x变量的赋值表达式是 。设有变量定义:float d[]={1.0,2.0,3.0,4.0,5.0}, *p=d+3;
请写出 printf("\n %f %f", *p, d[0]); 的输出结果为: 和 。
设有变量定义如下:char s[]="Hello!", *p; int i;
执行完 for(i=0; *p+i); i++); 后,变量i的值是__;*p+i)的值是’’_。
函数
void f(char s[ ], char t[ ])
{ int k=0;
while (s[k]=t[k]) k++;
}
等价于
void f(char *s, char *t)
{while (*s++=*t++); }
选择题
1、下面的程序段用来定义指针并赋值,请选出语法正确的程序段( C )。
A)int *p; scanf(“%d”,p); B)int *s,k; *s=100;
C) int *s,k; D) int *s,k
char *p,*c; char *p,*c;
s=&k; p=&c; s=&k; p=&c;
*p=’a’; s=p; *s=1;
2、程序段:int *p,a,b=1; p=&a; *p=10; a=*p+b; 执行后,a的值( B)。
A)12B)11C)10D)编译出错
3、若定义:int i,j=2,*p=&i ; 则能完成i=j赋值的功能的语句是( B)。
A)i=*p; B)*p=*&j; C)i=&j; D)i=**p;
4、若定义:double *p,a;则下列能通过scanf()正确输入项读入数据的程序段是( D)。
A)*p=&a; scanf(“%lf”,p); B)p=a; scanf(“%f”,p); C) p=&a; scanf(“%lf”,a); D) p=&a; scanf(“%lf”,p);
5、若有以下定义语句:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是( D )。
A) p+=2,++*p B) p+=2,*++p C) p+=3,*p++ D)p+=2,*(p++)
6、设p1和p2是指向同一个int型一维数组的指针变量,k为int 型变量,则下列不能正确执行的语句是( B)。
A)k=*p1+*p2; B) p2=k; C) p1=p2; D) k=*p1*(*p2);
7、设有以下定义:int a[]={6,7,8,9,10}; int *p;
则下列程序的输出结果为( D)。
p=a; *(p+2)+=2; printf(“%d,%d \n”,*p,*(p+2));
A)8,10 B)6,8 C)7,9D)6,10
8、下面程序输出结果是( C)。
main()
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf(“%d\n”,y);
}
A)17B)18C)19D)20
9、下列程序输出数组中的最大值,由s指针指向该元素,则在if语句中的判断表达式应该是(B)。
void main()
{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s;
for(p=