{练习题}指针(2)

一. 单选题
1.(单选题, 4分)已定义以下函数
void fun(char *p2, char *p1)
{ while((*p2=*p1)!=‘\0’){p1++;p2++; } }
函数的功能是(A)
A. 将p1所指字符串复制到p2所指内存空间
B. 将p1 所指字符串的地址赋给指针 p2
C. 对p1和p2两个指针所指字符串进行比较
D. 检查p1和p2两个指针所指字符串中是否有‘\0’
2.不正确的字符串赋值或赋初值方式是( C)
A. char *str;str=“string”;
B. char str[7]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};
C. char str1[10];str1=“string”;
D. char str1[]=“string”;
3.若有定义:int p[3];, 则以下叙述中正确的是(B)
A. 定义了一个基类型为int的指针变量p,该变量具有三个指针
B. 定义了一个指针数组p,该数组有三个元素,每个元素都是基类型为int的指针
C. 定义了一个名为
p的整型数组,该数组含有三个int类型元素
D. 定义了一个可指向一维数组的指针变量p,所指一维数组应有三个int类型元素
4.设有以下语句:
char str[4][12]={“aaa”,“bbb”,“ccc”,“ddd”};
char *strp[4];
int i;
for(i=0;i<4;i++) strp[i]=str[i];
若0≤k<4,下列选项中对字符串的非法引用是:(A)
A. strp
B. str[k]
C. strp[k]
D. * strp
5.若有以下定义和语句,则输出结果是:( C)
char *sp=“\t=\v\0will\n”;
cout<<strlen(sp)<<endl;
A. 14
B. 4
C. 10
D. 字符串中有非法字符,输出值不定。
6.下面程序的输出是: (B)
#include < iostream>
using namespace std;
int main()
{char *a=“1234”;
fun(a); cout<<endl;
}
void fun(char *s)
{char t;
if(*s){t=*s++; fun(s); }
if(t!=‘\0’) cout<<t;
}
A. 1234
B. 4321
C. 1324
D. 4231
7.若有以下定义:
int a[2][3]={1,2,3,4,5,6};
值不为5的表达式为(B)
A. (a[1]+1)
B. a[1][0]
C. a[0][2]+2
D. (
(a+1))[1]
8.下面程序的输出是:(D)
int main()
{char a[]=“ABCDEFG”, k, *p;
fun(a, 0, 2); fun(a, 4, 6);
cout<<a<<endl;
return 0;
}
fun(char *s, int p1, int p2)
{char c;
while(p1<p2)
{c=s[p1]; s[p1]=s[p2];
s[p2]=c; p1++; p2–;}
}
A. ABCDEFG
B. DEFGABC
C. GFEDCBA
D. CBADGFE
9.下面程序的输出是:(A)
int main()
{char *s=“wbckaaakcbw”;
int a=0, b=0, c=0, x=0, k;
for(; *s; s++)
switch(*s)
{case ‘c’ : c++;
case ‘b’ : b++;
default : a++;
case ‘a’ : x++;
}
printf(“a=%d,b=%d, c=%d, x=%d\n”, a, b, c, x);
}
A. a=8, b=4, c=2, x=11
B. a=4, b=2, c=2, x=3
C. a=8, b=4, c=2, x=3
D. a=4, b=4, c=2, x=3
10.若有以下的定义和语句:(A)
int main()
{int a[4][3], *p[4], j;
for(j=0; j<4; j++) p[j]=a[j];

}
则能表示a数组元素的表达式是:
A. *(p[1])
B. a[4][3]
C. a[1]
D. *(p+4)[1]
11.以下正确的定义和语句是:©
A. int a[10],*p;char *s;p=a;s=a;
B. double a[5][3],b[5][3],*s;s=a;b=a;
C. float a[5][3],*p[3];p[0]=a[0];p[2]=a[4];
D. int a[5][3],(*pb)[5],(*pp)[3];pb=a;pp=a;
12.若以下定义和语句,0≤i<10,则对数组元素地址的正确表示是:(D)
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
A. &(a+1)
B. a++
C. &p
D. &p[i]
13.不正确的字符串赋值或赋初值方式是:(C )
A. char *str;str=“string”;
B. char str[7]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};
C. char str1[10];str1=“string”;
D. char str1[]=“string”,str2[]=“12345678”;
14.strcpy库函数用于复制一个字符串。若有以下定义,则对strcpy库函数的正确调用是:(A)
char *str1=“copy”,str2[10],*str3=“hijklmn”;
char *str4,*str5=“abcd”;
A. strcpy(str2,str1);
B. strcpy(str3,str1);
C. strcpy(str4,str1);
D. strcpy(str5,str1);
15.运行下面程序时:(A)
#include < iostream>
using namespace std;
int main()
{int *p, j;
p=NULL;
p=fun();
for(j=0; j<4; j++){cout<<*p; p++;}
}
int *fun()
{int a[4], k;
for(k=0; k<4; k++)a[k]=k;
return(a);
}
A. 程序有错不能运行
B. 输出4个NULL
C. 输出 0 1 2 3
D. 输出 1 1 1 1
二. 填空题
16.以下程序的输出结果是________ 。
int main()
{ char *p=“abcdefgh”,r;
long q;
q=(long
)p;
q++;
r=(char
)q;
cout<<r<<endl; }
正确答案:efgh
17.设有以下程序:
int main()
{
int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
cout<<“a=”<<a<<endl;
cout<<“b=”<<b<<endl;
return 0;
}
执行该程序后,a的值为________ ,b的值为________ 。
正确答案:(1) 0 (2) 7
18. 以下程序的功能为求一个数组的最大值。请填空
#include< iostream>
using namespace std;
int fun(int *x,int n)
{
int *p=x;
int m=*p;
while(p<x+n)
{
if(*p>m)
{
m=*p;
}
//请填空
( )
}
return m;
}
int main()
{
int a[3]= {1,2,3};
cout<<fun(a,3)<<endl;
}
正确答案:p++;++p;p=p+1
19.下列程序的输出结果是 ________ 。
#include< iostream>
using namespace std;
void fun(int *n)
{
while( (*n)–);
cout<<(++(*n))<<endl;
}
int main()
{
int a=100;
fun(&a);
return 0;
}
正确答案:0
20.以下程序的输出结果是 ________ 。
#include< iostream>
using namespace std;
int main()
{
int arr[ ]= {30,25,20,15,10,5}, p=arr;
p++;
cout<<
(p+3)<<endl;
return 0;
}
正确答案:10
21.下列程序段的输出结果是________。
#include< iostream>
using namespace std;
void fun(int *x, int *y)
{
cout<<*x<<" “<<*y<<” “;
*x=3;
*y=4;
}
int main()
{
int x=1,y=2;
fun(&y,&x);
cout<<x<<” “<<y<<endl;
}
正确答案:2 1 4 3
22.下列程序的输出结果是________。
#include< iostream>
using namespace std;
int main()
{
int a[10]= {9,8,7,6,5,4,3,2,1,0},p=a+5;
cout<<
–p;
}
正确答案:5
23.下列程序的运行结果是________。
#include< iostream>
using namespace std;
void fun(int *a, int *b)
{
int *k;
k=a;
a=b;
b=k;
}
int main()
{
int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
cout<<a<<” "<<b<<endl;
return 0;
}
正确答案:3 6
24. 下面程序的输出结果是________。
#include< iostream>
using namespace std;
int main()
{
int a[ ]= {1,2,3,4,5,6,7,8,9,0,},*p;
p=a;
cout<<*p+9;
return 0;
}
正确答案:10

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C0ntr01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值