指针
一 单项选择题(每题2分,共40分) 1 以下叙述中错误的是_B__。
A 在程序中凡是以“#”开始的语句行都是预处理命令行 B 预处理命令行的最后不能以分号表示结束 C #define MAX是合法的宏定义命令行
D C程序对预处理命令行的处理是在程序执行的过程中进行的
2 若程序中有宏定义行:#define N 100 ,则以下叙述中正确的是__B_。
A 宏定义行中定义了标识符N的值为整数100
B 在编译程序对C源程序进行预处理时用100替换标识符N C 对C源程序进行编译时用100替换标识符N D 在运行时用100替换标识符 3 若有如下宏定义:
#define N 2
#define y(n) ((N+1)*n)
则执行下列语句:z=4*(N+y(5));后的结果是_B__。
A 语句有错误 B z值为68 C z值为60 D z值为180 4 以下程序运行后的输出结果是_A__。
#define F(X,Y) (X)*(Y) main()
{ int a=3,b=4;
printf(\
}
A 12 B 15 C 16 D 20
5 以下程序运行后的输出结果是_C__。
#define f(x) (x*x) main()
{ int i1,i2;
i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(\%d,%d\\n\,i1,i2); }
A 64,28 B 4,4 C 4,3 D 64,64
6 若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。 A int p=&a; B int *p=a; C int *p=*a; D int *p=&a; 7 已知下列说明语句:
static int a[]={2,4,6,8}
static int *p[]={a,a+1,a+2,a+3}; int **q; q=p;
则表达式**(q+2)的值是_A__。
A 6 B 2 C 4 D 8 8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该__C_。
A *px B a C px D &a 9 若指针px为空指针,则_B__。。
A px指向不定 B px的值为零 C px的目标为零 D px的地址为零
10 对下语句int *px[10];,下面正确的说法是_B__。
A px是一个指针,指向一个数组,数组的元素是整数型。 B px是一个数组,其数组的每一个元素是指向整数的指针。 C A和B均错,但它是C语言的正确语句。
D C语言不允许这样的语句。
11 具有相同基类型的指针变量p和数组y,下列写法中不合法的是_D__。
A p=y B *p=y[i] C p=&y[i] D p=&y 12 已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p; ,
则表达式 *(p[0]+1)+**(q+2) 的值是_A__。
A 5 B 4 C 6 D 7 13 说明语句int *(*p)();的含义为_D__。
A p是一个指向int型数组的指针 B p是指针变量,它构成了指针数组
C p是一个指向函数的指针,该函数的返回值是一个整型
D p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 14 设有如下程序段
char s[20]=\
则执行p=s;语句后,以下叙述正确的是_A__。 A 可以用*p表示s[0]
B s数组中元素个数和p所指字符串长度相等 C s和p都是指针变量
D 数组s中的内容和指针变量p中的内容相同
15 设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。在
for(i=0;i A *s1++=*s2++; B s1[n-1]=s2[n-1]; C *(s1+n-1)=*(s2+n-1); D *(++s1)=*(++s2); 16 给出下列程序的运行结果_B__。 #include { static char a[]=\ char *ptr1=a,*ptr2=b; int k; for(k=0;k<7;k++) if(*(ptr1+k)==*(ptr2+k)) printf(\} A gae B ga C language D 误 17 以下程序执行后的输出结果是_A__。 void fun1(char *p) { char *q; q=p; while(*q!='\\0'){ (*q)++; q++; } } main() { char a[]={\Program\},*p; p=&a[3]; fun1(p); printf(\%s\\n\,a); } A Prohsbn B Prphsbn C Progsbn D Program 18 以下程序执行后的输出结果是_C__。 void swap(char *x,char *y) { char t; t=*x; *x=*y; *y=t; } main() { char *s1=\abc\,*s2=\123\; swap(s1,s2); printf(\%s,%s\\n\,s1,s2); } A 123,abc B abc,123 C 1bc,a23 D 321,cba 19 以下程序执行后的输出结果是__C_。 main() { char *p[]={\3697\,\2584\}; int i,j; long num=0; for(i=0;i<2;i++) { j=0; 有语法错

