一、单项选择题
1.以下程序的输出结果是( B)。
main( )
{char a[10]={'1','2','3','4','5','6','7','8','9',0},*p;
int i;
i=8;
p=a+i;
printf("%s\n",p-3);
}
A) 6
B) 6789
C) ‘6’
D) 789
2.以下程序的运行结果是( A )。
#include "stdio.h"
main( )
{int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a+5,*q=NULL;
*q=*(p+5);
printf("%d %d\n", *p, *q);
}
A) 运行后报错
B) 6 6
C) 6 11
D) 5 5
3.若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是( C )。
int t[3][3],*pt[3],k;
for(k=0; k<3; k++) pt[k]=&t[k][0];
A) t[2][0]
B) t[2][2]
C) t[l][2]
D) t[2][l]
4.下面程序把数组元素中的最大值放入a[0]中,则在if语句中的条件表达式应该是( B )。
main( )
{int a[10]={6,7,2,9,1,10,5,8,4,3}, *p=a, i;
for(i=0; i<10; i++, p++)
if(________) *a=*p;
printf("%d",*a);
}
A) p>a
B) *p>a[0]
C) *p>*a[0]
D) *p[0]> *a[0]
5.以下程序的输出结果是( A )。
#include
#include
main( )
{char *a="abcdefghi";
int k;
fun (a); puts(a);
}
fun(char *s)
{int x, y;
char c;
for(x=0, y=strlen(s)-1; x
{c=s[y]; s[y]=s[x]; s[x]=c;}
}
A) ihgfedcba
B) abcdefghi
C) abcdedeba
D) ihgfefghi
6.以下程序的输出结果是( B )。
main( )
{char *s="12134211";int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{switch(s[k])
{case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;
}
v[i]++;
}
for(k=0;k<4;k++) printf("%d ",v[k]);
}
A) 4 2 1 1
B) 0 0 0 8
C) 4 6 7 8
D) 8 8 8 8
7.以下程序的输出结果是( D )。
#include
main( )
{char *p1,*p2,str[50]="ABCDEFG";
p1="abcd";p2="efgh";
strcpy(str+1,p2+1);strcpy(str+3,p1+3);
printf("%s",str);str+1表示数组第二个数据B,p2+1指向f,即把fgh复制到BCD的位置,同时复制‘\0’
}
A) AfghdEFG
B) Abfhd
C) Afghd
D) Afgd
8.若有以下定义和语句:
double r=99,*p=&r;
*p=r;
则以下正确的叙述是( D )。
A) 以上两处的*p含义相同,都说明给指针变量p赋值
B) 在"double r=99,*p=&r; "中,把r的地址赋给了p所指的存储单元
C) 语句"*p=r; "把变量r的值赋给指针变量p
D) 语句"*p=r; "取变量r的值放回r中
9.若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a, i;
其中0≤ i ≤9, 则对a数组元素不正确的引用是( D )。
A) a[p-a]
B) *(&a[i])
C) p[i]
D) *(*(a+i))=*a[i]
10.下列程序执行后的输出结果是( A )。
void func(int *a, int b[ ])
{b[0]=*a+6;}
main()
{int a, b[5];
a=0; b[0]=3;
func(&a, B);
printf("%d\n", b[0]);
}
A) 6
B) 3
C) 8
D) 9
11.下列程序执行后的输出结果是( B )。
main()
{int a[3][3], *p, i;
p=&a[0][0];
for(i=0; i<9; i++) p[i]=i+1;
printf("%d\n", a[1][2]);
}
A) 3
B) 6
C) 9
D) 随机数
12.请选出正确的程序段( C )。
A) int *p;
B) int *s, k;
C) int *s, k;
D) int *s, k;
scanf("%d", p); *s=100; char *p, c; char *p, c;
s=&k; s=&k;
p=&c; p=&c;
*p='a'; s=p;
*s=1;
13.已知指针p的指向如下图所示,则执行语句 *- -p; 后*p的值是( B )。
a[0] a[1] a[2] a[3] a[4]
1020304050
A) 30
B) 20
C) 19
D) 29
14.设已有定义: char *st="how are you";下列程序段中正确的是( A )。
A) char a[11], *p; strcpy(p=a+1, &st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[ ], *p; strcpy(p=&a[1], st+2);
15.以下程序的输出结果是( C )。
main( )
{int i, x[3][3]={9, 8, 7, 6, 5, 4, 3, 2, 1}, *p=&x[1][1];
for(i=0; i<4; i+=2) printf("%d ", p[i]);
}
A) 5 2
B) 5 1
C) 5 3
D) 9 7
16.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是( B )。
A) i=*p;
B) *p=*&j;
C) i=&j;
D) i=**p;
17.以下定义语句中,错误的是(D )。
A) int a[ ]={1,2};
B) char *a[3];
C) char s[10]="test";
D) int n=5,a[n];
18.下列程序段的输出结果是(A )。
void fun(int *x, int *y)
{printf("%d %d", *x, *y); *x=3; *y=4;}
main()
{int x=1,y=2;
fun(&y, &x);
printf("%d %d", x, y);
}
A) 2 1 4 3
B) 1 2 1 2
C) 1 2 3 4
D) 2 1 1 2