当前位置:文档之家› 指针习题

指针习题

指针(C语言程序设计习题解答与上机指导)
1.以下说法正确的是()
A.一个变量的地址称为该变量的指针
B.变量的地址和指向它的指针变量的地址是相同的
C.指针变量的指向一旦确定就不能改变
D.不能定义两个指针变量指向同一个变量
答案:A
2.执行下面程序的输出结果为()
int m=1,j,+p=&m;
for (j=0;j<3;j++)
*p=*p+j;
printf(“%d,%d”,m,*p);
A. 1,4
B. 4,4
C.1,1
D.4,1
答案:B
3.若有“int a[6],*p;p=a;”,则不能正确对数组元素进行引用的是()
A.a[0]
B. *p
C. *(p+2)
D. p+2
答案:D
4.下列语句正确的是()
A. char a[]=”dcba”;
B. char a[10];a[]=”dcba”;
C. char *p;*p=”dcba”;
D. char a[10];a=”dcba”;
答案:A
5.若有“char *a[2]={“321”,“654”};”,以下说法正确的是()
A.数组a为2*4的二维数组
B.可以用puts(*a[0]);输出“321”
C.a[0]的值为“321”的首地址
D.定义错误
答案C
6.设有定义:float x,*p= &x;则下列表达式中错误的是()
A.*&p B. *&x C. &*p D. &*x
答案:D
7.若定义short num[][3]={2,4,6,8,10,12};则num[1][1]的值是()
A.8 B.4 C.2 D.10
答案:D
8.设有定义语句“float s[10],*p1=s,*p2=s+9;”,则下列表达式中,不能表示数组s的合法数组元素的是()
A.*(p1--)B.*(++p1)C.*(--p2)D.*(++p2)
答案:D
9.设有:char s[3][8]={“1”,“21”,“321”},*p=s;则正确的语句是()
A.printf(“%s”,*(p+1*8+0))
B.puts(*(*(p+1)+0))
C.scanf(“%s”,*(*(p+1)+0))
D.gets(&s[1][1])
答案:D
10.执行下列程序段后,*(p+5)的值是()
static char s[ ]=”Hello ”;
char *p;
p=s;
A.‘o ’
B.‘\0’
C.‘o ’的地址
D.不确定的值
答案:B
11. 以下程序的输出结果是()
#include “stdio.h ”
void main(void)
{
static int a[]={1,2,3,4,5,6},*p;
p=a;*(p+3)+=2;
printf(“%d,%d\n ”,*p,*(p+3));
}
A.0,5
B.1,5
C.0,6
D.1,6
答案:D
12. 在以下定义中,标识符p ()
int (*p )[3];
A. 定义不合法
B. 是一个指针数组名,每个元素是一个指向整型变量的指针
C. 是一个指针,它指向一个具有三个元素的一维数组
D. 是一个指向整型变量的指针
答案:C
13. 以下程序的输出结果是()
char *s=”ABCD ”,*p;
for(p=s;*p;p++)
printf(“%s\n ”,p);
答案:A
14. 下面程序的输出结果是()
#include <stdio.h>
void main(void)
{ int n=6,*p=&n;
*p=8;
printf(“%d\n ”,n);
}
A.8
B.6
C.7
D.不确定
答案:A
15. 下面程序的输出结果是()
#include <stdio.h>
void main(void)
A. ABCD
BCD
CD
D B. A B C D C. D C B A D. ABCD ABC AB A
{
int a=3,b=6,c=9;
int *pa=&a,*pb=&b,*p;
*(p=&c)=*pa*(*pb);
printf(“%d\n”,c);
}
A.8
B.18
C.27
D.9
答案:B
16.下面程序的输出结果是()
#include <stdio.h>
void main( void )
{
char a[]={0,1,2,3,4,5,6,7,8,9},*p=a;
printf(“%d,%d\n”,*p+3,*(p+6));
}
A.2,2
B.3,5
C.3,6
D.3,7
答案:C
17.下面程序的输出结果是()
#include <stdio.h>
void main(void)
{ int a[]={2, 4,6,8,10};
int *p=&a[4];
printf(“%d\n“,*--p);
}
A. 10
B.9
C.7
D.8
答案:D
18.若char s[10];s=“abcd”;printf(“%s”,s);程序的输出结果是()
A.abcd B.a C.dcba D.编译错误
答案:D
二、填空题
1.若定义int a[][3]={{1,2,3},{4,5,6}},(*p)[3]=a;则表达式*(*p+1)的值是 2 。

2.若定义char s[5][10],*p=s;则使用p来表示数组元素s[2][3]的表达式是*(p+2*10+3)。

3.数组名代表地址常量。

指针代表地址变量。

4.设有char s[]=“123456”,*p=s+1;则表达式“*p+1”值对应的字符是 3 。

5.对于数组x[5][5],*(x+2)+3表示&x[2][3] ,*(x[3]+2)表示x[3][2] 。

6.设有char *s=“ABCD”,则printf(“%s”,s)的输出是ABCD ;而printf(“%c”,*s)的输出是 A 。

7.将字符数组s1中的字符复制到字符数组s2中。

#include <stdio.h>
main()
{
char s1[80],s2[80],*p1,*p2;
gets s1 ;p1=s1;p2=s2;
while(*p2++=*p1++);
printf(“s2=%s”, s2 );
}
8.将输入的字符串按逆序打印出来。

例如,输入abcd,则按dcba顺序打印出来。

#include <string.h>
#include <stdio.h>
main()
{
char *str,s[20]; int n ;
str= s ;
scanf(“%s”,str);
n=strlen(str);
while(--n>=0)
{
str=&s[ n ];
printf(“%c”,*str);
}
}。

相关主题