C语言 第7章 指针(答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章指针
一、选择题
1、变量的指针,其含义是指变量的(B)
A)值B)地址C)名D)一个标志
2、若有以下定义:
int x[10], *pt=x;
则对x数组元素的正确引用是(B)
A) *&x[10] B) *(x+3) C) *(pt+10) D) pt+3
3、若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是(B)
A)*p B)x[5] C)*(p+1) D)*x
4、设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是(D)
A)float *p=1024; B)int *p=(float x);
C)float p=&x; D)float *p=&x;
5、有以下程序
main(){
int n,*p=NULL;
*p=&n;
printf(“Input n:”);
scanf(“%d”,&p);
printf(“output n:”);
printf(“%d\n”,p);
}
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是(A)
A)int n,*p=NULL; B)*p=&n; C)scanf(“%d”,&p)D)printf(“%d\n”,p);
6、若有说明:int *p,m=5,n;以下正确的程序段是(D)
A)p=&n; B)p=&n;
scanf(“%d”,&p); scanf(“%d”,*p);
C)scanf(“%d”,&n); D)p=&n;
*p=n; *p=m;
7、若有语句int * p1, a=4;和p1=&a;下面均代表地址的一组选项是(C)
A)a, p1, *&a B)&*a, &a, *p1 C)* &p1, * p1, &a D)&a, &* p1, p1
8、下面程序的输出结果是(D)
main(){
int a=25,*p;
p=&a;
printf("%d\n",++*p);
}
A)23 B)24 C)25 D)26
9、下列函数的功能是
(A)
int fun (char *x){
char *y=x;
while(*y++);
return(y-x-1);
}
A)求字符串的长度B)比较两个字符串的大小
C)将字符串x复制到字符串y C)将字符串x连接到字符串中y后面
10、设有如下定义
char *aa[2]={"abcd","ABCD"};
则以下说法正确的是(D)
A)aa数组的元素的值分别是“abcd”和“ABCD”。
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组。
C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址。
D)aa数组的两个元素中各自存放了字符'a'和'A'的地址。
11、若有以下定义和语句
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示a数组元素的表达式是(B)
A)*p B)a[10] C)*a D)a[p-a]
12、下面定义不正确的是(B)
A)int *p; B)int p[n]; C)int *p(); D)int (*p)();
13、有下面程序(假设int 类型为2个字节)
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9); }
该程序有两个printf函数,如果第一个printf输出的是194,则第二个printf输出的结果是(D)
A)203 B)204 C)1a4 D)1a6
14、下面程序的输出结果是(D)
main(){
char p1[10]="abc", *p2="ABC", str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n",str);}
A)xyzabcABC B)zabcABC C)yzabcABC D)xyabcABC
15、有以下程序
main(){
char str[]="xyz",*ps=str;
while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);}
执行后输出结果是(C)
A) yz<回车>xyz B) z<回车>yz
C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz
16、下面程序的输出结果是(C)
main()
{
int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf("%d\n",y); }
A)17 B)18 C)19 D)20
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、设有如下定义:
int (*ptr)();
则以下叙述中正确的是(C)。
A)ptr是指向一维数组的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据指针
19、若有以下定义:int a[2][3]={2,4,6,8,10,12};
则以下描述正确的是( )
A)*(a+1)为元素a[1][0]的指针B)a[1]+1为元素a[1][1]的指针
C)*(a+1)+2为元素a[1][2]的指针D)*a[1]+2的值是12
20、以下程序的运行结果是(A)
#define NULL 0
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
21、若有以下说明:
int w[3][4]={{0,1},{2,4},{5,8}};
int (*p)[4]=w;