第8章 善于利用指针
指针是什么
指针变量
(2012年9月真题 21题)设有定义:int x=0,*p;?,立刻执行以下语句,正确的语句是
A)p=x;????????B)*p=x;???????C)p=NULL;??????D)*p=NULL;
答案:C
(2012年3月真题 27题)有以下程序
#include
main()
{int a,b,k,m,*p1,*p2;
k=1,m=8; p1=&k,p2=&m;
a=/*p1-m; b=*p1+*p2+6;
printf(“%d ”,a); printf(“%d\n”,b); }
编译时编译器提示错误信息,你认为出错的语句是
A、a=/*p1-m B、b=*p1+*p2+6
C、k=1,m=8; D、p1=&k,p2=&m;
答案:A
(2011年9月真题 23题)若有定义语句:double a,*p=&a;以下叙述中错误的是
A.定义语句中的*号是一个地址运算符
B.定义语句中的*号只是一个说明符
C.定义语句中的 p 只能存放 double 类型变量的地址
D.定义语句中,*p=&a 把变量 a 的地址作为初值赋给指针变量 p
答案:A
(2011年9月真题 25题)若定义语句:int year=2009,*p=&year;,以下不能使变量 year 中的值增至 2010 的语句是:
A.*p+=1; B.(*p)++; C.++(*p); D.*p++;
答案:D
(2010年9月真题 25题)以下程序段完全正确的是A)int *p;? scanf("%d",&p);B)int *p;? scanf("%d",p);C)int k, *p=&k;? scanf("%d",p);D)int k, *p;? *p= &k;?? scanf("%d",p);
答案:C
(2010年3月真题 23题)下列语句组中,正确的是
A)char *s;s="Olympic"; B)char s[7];s="Olympic";
C)char *s;s={"Olympic"};D)char s[7];s={"Olympic"};
答案:A
(2010年3月真题 26题)有以下程序
#include
void fun(char *c,int d)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char b='a',a='A';
fun(&b,a);
printf("%c,%c\n",b,a);}
程序运行后的输出结果是
A)b,B,b,A B)b,B,B,A
C)a,B,B,a D)a,B,a,B
答案:A
(2009年3月真题 26题)有以下程序
#include
void fun(int *a,int *b)
{ int *c; c=a;a=b;b=c; }
main()
{ int x=3,y=5,*p=&x,*q=&y;
fun(p,q); printf("%d,%d,",*p,*q);
fun(&x,&y);printf("%d,%d\n",*p,*q); }
程序运行后输出的结果是
A)3,5,5,3 B)3,5,3,5 C)5,3,3,5 D)5,3,5,3
答案:B
(2009年3月真题 27题)有以下程序
#include
void f(int *p,int *q);
main()
{ int m=1,n=2,*r=&m;
f(r,&n); printf("%d,%d",m,n); }
void f(int *p,int *q)
{p=p+1;*q=*q+1;}程序运行后的输出结果是
A)1,3 B)2,3 C)1,4 D)1,2
答案:A
(2008年4月真题 15题)以下定义语句中正确的是( )。
A)int a=b=0;B)char A=65+1,b='b';
C)float a=1,*b=&a,*c=&b;D)double a=0.0;b=1.1;
答案:B
通过指针引用数组
(2012年9月真题 27题)有以下程序
#include
main()
{int a[]={10,20,30,40},*p=a,i;
for(i=0;i<=3;i++){a[i]=*p;p++;}
printf("%d\n",a[2]);}
程序运行后的输出结果是
A)30?????????????B)40????????????C)10??????????????D)20
答案:A
(2012年9月真