【习题】
一、选择题
1.变量的指针,其含义是指该变量的( )。
A.值 B.地址 C.名 D. 一个标志
2.若有定义:int i,j=2,*p=&i;则能完成 i=j 赋值功能的语句是( )。
A.i=*p; B.*p=j; C. i=&j; D. i=**p;
3.如果有如下程序段:
int *p,a=10,b=1;
p=&a;
a=*p+b;
执行该程序后,a 的值为( )。
A.12 B.10 C.11 D.编译出错
4.若已定义 int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; 其中则对 a 数
组元素不正确的引用是( )。
A.a[p-a] B.*(&a[i]) C.p[i] D.a[10]
5.下面程序段的输出结果是( )。
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));
A.3 B.4 C.1 D.2
6.若有说明:int *p,m=5,n;,以下正确的程序段是
A.p=&n;scanf("%d",&p); B.p=&n;*p=m;
C.scanf("%d",&n);*p=n; D.p=&n;scanf("%d",*p);
7.下面程序段的运行结果是( )。
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
A.67 B.0 C.字符′C′的地址 D.字符′C′
8.下面说明不正确的是( )。
A.char a[10]="china"; B.char a[10],*p=a;p="china"
C.char *a;a="china" D.char a[10],*p;p=a="china"
9.下列叙述中错误的是( )。
A.若有 char *str=“C language”;str 的值是 C language。
B.若有一个二维数组 arr,则*(arr+i)与 arr[i]的值相同。
C.int(*p)[5]表示 p 是一个指向含有 5 个元素的一维整型数组的指针。
D.指针是指一个变量的地址,存放这个地址的变量就是指针变量。
10.有以下定义语句:int var,arr[10],*p;则下列语句中合法的是( )。
A.p=var B.p=arr C.p=10 D.p=arr[5]
11.两个指针变量不可以进行的操作是( )。
A.相减 B.相加 C.指向同一个地址 D.比较
12.运行以下程序输出的结果是( )。
main(){
int a[]={ 1,2,3,4,5,6},*p;
p=a; *p+=2;
printf(“%d,%d\n”,*p,*(p+3));}
A.1,6 B.2,5 C.3,4 D.3,5
13.若有定义:char s1[4]=”ab”,*p;则执行以下语句后输出为( )。
ptr=s1;
printf(“%c\n”,*(ptr+1));
A.a B.b C.字符’a’的地址 D.不确定
14.下面判断正确的是( )。
A.char *a="china";等价于 char *a;*a="china";
B.char str[5]={"china"};等价于 char str[]={"china"};
C.char *s="china";等价于 char *s;s="china";
D.char c[4]="abc",d[4]="abc";等价于 char c[4]=d[4]="abc";
15.下面程序段中,输出*的个数是( )。
char *s="\ta\018bc";
for(;*s!='\0';s++)printf("*");
A.9 B.5 C.6 D.7
二、运行结果题
1.以下程序的运行结果是( )。
#include <stdio.h>
main(){
int a[ ]={1,2,3,4},y,*p=&a[3];
--p;
y=*p;
printf("y=%d\n",y);}
2.下列程序的运行结果为( )。
#include<stdio.h>
void fun(char*str){
int a,b;
for(a=b=0;str[a]!='\0';a++)
if(str[a]!='c')
str[b++]=str[a];
str[b]='\0';}
void main(){
char str[]="abcdef";
fun(str);
printf("str[]=%s",str); }
三、编程题
1. 编写程序用指针变量对 3 个整数按照从小到大的顺序排序并输出。
2.用指针变量作为函数参数求 10 个整数的最大值。
3.用指向字符串的指针变量作为函数参数,编写函数实现字符串的连接
功能。

