1.变量的指针,其含义是指该变量的_B
a)值
b)地址
c)名
d)一个标志
2.若有语句int *point,a=4:和point=&a;下面均代表地址的一组选项是__D_
a)a,point,*&a
b)&*a,&a, *point
c)*&point, *point,&a
d)&a,&*point. point
3.若有说明;int *p,m=5,n;以下正确的程序段的是_D_.
a)p=&n; scanf("%d". ,&p); .
b)p=&n; scanf("%d",*p);
c)scanf"%d", ,&n); *p=n;
d)p=&n; *p=m;
4.以下程序中调用scanf函数给变量s输入数值的方法是错误的,其错误原因是_一B
main{}
int *p,*q,a,b;
p=&a;
printf("input a:");
scanf"%d",*p);
}
a)*p表示的是指针变量p的地址
b)*p表示的是变量a的值,而不是变量a的地址
c)*p表示的是指针变量p的值
d)*p只能用来说明p是一个指针变量
5.贿变量定义和函数调用语句: int a=25; print_ value(&a);" 下面函数的正确输出结果是_D_.
void print_ _value(int *x)
{ printf("%d\n",++*x);}
a)23 b)24 c)25 d)26
6.若有说明: long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 B
A) *p=&a; seanf("%l!", p);
B) p=(long *)malloe(8); scanf("%!", p);
C) scanf("%ld",p=&a);
D) scaf("%l!",&a);
7.有以下程序 B
#include<stdio.h>
main()
{ int m=1,n=2,*p=&m, *q=&n,*r;
R=P:P=q;q=r;
printf("%d,%d,%d,%d\n" ,m,n,*p.*q); .
}程序运行后的输出结果是
A) 1,2, 1, 2
B) 1,2, 2, 1
C)2,1,2,1
D)2,1,1,2
8.有以下程序 B
main()
{ int a=1, b=3, c=5;
int *p1=&a, *2=&b, *p=&c; .
*p=*p1*(*R2);
printf("%d\n",c); .
}执行后的输出结果是
A) 1
B) 2
D) 4
9.有以下程序 C
main()
{ int a,k=4,m=4,*1=&k,*p2=&m;
a=p!== &m;
pxint("%d\n",a);
}程序运行后的输出结果是( )
A) 4 B)1 C)0 D)运行时出错,无定值
10.在16位编译系统上,若有定义int a[]={10.20,30}, *p=&a;,当执行p++;后,下列说法错误的是( A )
A) p向高地址移了-个字节
B) p向高地址移了一个存储单元
C) p向高地址移了两个字节
D) p与a+1等价
11.有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3], b; b=p[5]; b中的值是(D )
A)5 B)6 C)8 D)9
12.若有以下定义,则对a数组元素的正确引用是 D
int a[5];*p=a;
a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)
13.若有以下定义,则p+5表示__.A
int a[10],*p=a;
a)元素a[5]的地址
b)元素a[5]的值
c)元素a[6]的地址
d元素a[6]的值
14.设已有定义: int a[10]={15,12,731.47,20,16,28,13,19}, *p; 下列语句中正确的是( )
A) for(p=a;a<(p+10);a++);
B) for(p=a;p<(a+10);p++);
C) for(p=a;a=a+10;p<a;p++);
D) for(p=a;a<p+10; ++a);
15.有以下程序段
#include <stdio.h>
int main(
{
intx[]= {10, 20, 30};
int *px=x;
print("%d,", ++*px); print("%d,", *px); .
px=x;
print("%d,", (*px)++); printf("%d,", *px); .
px=x;
printf("%d,", *px++); printf("%d,", *px);
px=x;
printf("%d.,", *++px); printf("%dn", *px); .
return 0;
}程序运行后的输出结果是( A )
A) 11,11,11,12,12,20,20,20
B) 20,10,11,10,11,10,11,10
C) 11,11,12,12,13,20,20
D) 20,10.11,20.11,12,20,20
16.设有如下定义则程序段的输出结果为 D
int ar[]={6,7.8.9,10};
int *ptr; .
ptr=arr; .
*(ptr+2)+=2;
printf ("%d,%d\n",*ptr, *(ptr+2));
A)8,10
B)6,8
C)7,9
D)6,10
17.若有定义:int a[={2.4,6,8,10,12},*p=a; 则*(p+1)的值是 4 , *(a+5)的值是 12
18.若有以下说明和语句,int c[4][5](*p)[5]; p=c;能正确引用c数组元素的是__D
A)p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))
19.若有定义: int a[2][3].则对a数组的第i衍j列元素地址的正确引用为 a[i][j],*(*(a+i)+j),*(a[i]+j)
20.若有以下定义:int a[2][3]={2,4.6,8,10,12};则a[1][0]的值是 8 . *(*(a+1)+0)的值是 8
21.有以下定义char a[10].*b=a;不能给数组a输入字符串的语句是( B )
A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b); .
22.下面程序段的运行结果是__ C.
char *s="abcde*";
s+=2; printf("%d", s);
a)ede b)字符 c )字符c的地址 d)无确定的输出结果
23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( C )
A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;
C) char s[10];s="abcdefg"; //s单独存在时是常量 D) char s[0];tcpy(,"abcdefg");
24.设已有定义: char *st="how are you";下列程序段中正确的是( D )
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);
25.有以下程序输出结果是( D )
main()
char a[]="programming" ,b[]="language";
char *p1,*p2;
int i;
p1=a:p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf("%c",*(p1i));
A)gm B)rg C) or D)ga
26.设p1和p2是指向同一个字符串的指针变量, c为字符变量,则以下不能正确执行的赋值语句 B
a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);
27.以下正确的程序段是_
a)char str[20];
b)char *p;
scanf("%s" ,&str); .
scanf("%s";p);
c)char str[20];
d)char str[20],*p=str;
scanf("%s" ,&str[2]);
scanf("%s" , p[2]);
28.若有说明语句则以下不正确的叙述是 A
char a[]="It is mine";
char *p="It is mine'";
a)a+1表示的是字符的地址
b)p指向另外的字符串时,,字符串的长度不受限制
c)p变中存放的地址值可以改变
d)a中只能存放10个字符
29. 下面程序的运行结果是 B
#include <stdio.h>
#include <string.h>
main()
{ char *s1="AbDeG";
char *s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(51.s2));
- 正数 b)负数 c)零 d)不确定的值
30.有以下程序运行后的输出结果是_。A
void f(int *x,nt *y)
intt;
t=*x;*x=*y;*y=t;
main()
int a[8-={1,23.4.5,6.7,8},i=0.*p.*q:
p=a;q=&a[7];
while(*p!=*q && i<8){f(p,q); p++;q--;i++;}
for(i=0;i<8;i+ +) printf("%d," ,a[i]);
A) 8,2,3,4,5,6,7,1, B) 5,6.7,8.1.2.3.4.
C) 1,2,3,4,5,6,7,8, D) 8,7,6,5,4,3,2,1,
31.定义以下函数 C
fum (int *p)
{ return *p; }
该函数的返回值是
A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D) 形参p的地址值
32.有以下程序
int f(int b[[4])
{
int i,j,s=0;
for(j=0; j<4; j++)
{
i=j
if(i>2) i=3-j;
s+=b[i][i];
}
return s;
}
main()
{
int a[4]4] = {{1,2,3,4},{0,2,4,5}.{3,6,9,12}, {3,2,1,0}};
printf("%d\n" f(a));
}执行后的输出结果是 D
A)12 B)11 C)18 D) 16
33.若有以下函数首部则下面针对此函数的函数声明语句中正确的是 D
int fun(double x[10], int *n)
A) int fun(double x, int *n); B) int fun(double , int );
c) int fun(double *x, int n); D) int fun(double *, int *);
34.有以下程序执行后的输出结果是( ) A
void sum(int *a)
{ a[0]=a[1];}
main( )
{ int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;
for(i=2; i>=0;i--) sum(&aa[i]);
printf("%d\n", aa[0]);
A)4 B)3 C)2 D)1
35.下段代码的运行结果是: D
int main()
char a;//段错误
char *str=&a;
strcpy(st "hello");
puts(str);
return 0;
}
- hello B)null C)h D)发生异常
36.下段程序的运行结果是 B
void main()
char *p, *q; .
char str[]="Hello,World\n";
q=p= str;
p++;
print(q);
print(p);
void print(char *s){printf(“%s”, s);}
A)H e
B)Hello, World elle, World
C)Hello, World Hello, Worl
D)elle, World ell, World
37.有以下程序 D
void fiun(char *c; int d){
*c=*c+1;
d=d+1;
pintf("%c,%c" ,*c, d);
}
void main(){
char a='A',b='a';
fun(&b,a);
printf("%c,%c\n", a,b);
}
程序运行后的输出结果是_。
A)B.,a,B,a B)a,B,a,B
C)A,b,A,b D) b,B,A,b
38、下面选项属于函数指针的是: A
A. (int*)p(int, int) B. int *p(int, int) c、两者都是 D.两者都不是
39、若有函数max(a,b), 并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_D
A)(*p)max(a, b);
B)*pmax(a,b);
C)(*p)(a,b); D) *p(a,b);
41、下列选项中声明了一个指针数组的是 : B
A)int *p[]; B)int (*p)[2];
C)typedef int* intPtr; intPtr p[2];
D)A和B
E)A和C
F)B和C
42、下面代码能通过编译的是: A
A)int main( ){
int a[3]={1,2,3};
int *b[3]={&a[1].&a[2],&a[3]};
int**p=b;
return 0;
}
B)int main(){
int a[3]={1,2,3};
int *b[3]= {a[1],a[2], a[3]};
int**p=b;
}
C)int main(){
int a[3]={1,2,3};
int *b[3]={&[1].&a[].&a[3]};
int*p=b;
return 0;
}
D)int main(){
int a[3]={.23};
int *b[3]={&a[1],&a[2],&a[3};
int *p= &b;
return 0;
}
A) pa是一个指向数组的指针,所指向的数组是5个int型元素int (*p)[5] D
B)pa是一个指向某数组中第5个元素的指针,该元素是nt型变量
C)pa [5]表示某个元素的第5个元素的值
D) pa是一-个具有5个元素的指针数组,每个元素是一个int型指针
44、若有以下定义,且0<=i<4, 则不正确的赋值语句是
int b[4][6], *p, *q[4]:
A)q[i]=b[i]; B)p=b; C) p=b[i] D) q[i] = &b[0][0];
45、若要对进行++运算,则a应 具有下面说明__ C D
A) int a[3][2]; B) char *a[]= {“12”,"ab"};
C) char (*a)[3]; D) int b[10], *a=b; .
46、 若有以下说明语句: C
char *language[]= {'FORTRAN","BASIC'","PASCAL","JAVA","C"}; char**q; q= language +2;
printf(“%o\n”, *q);
A) lnguage[2]元素的地址;
B)字符串PASCAL
C) language[2]元素的值,它是字符串PASCAL的首地址
D)格式说明不正确,无法得到确定的输出
47、 若有以下程序:C
void main)
char *a[3]= {'"Iove","China"};
char **ptr=a;
print("%c %s" , *(*(a+1)+1), *(ptr+1) );
这段程序的输出是()
A)I l
B)o o
C)o love