C指针练习题带答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、设有下列定义 char s[ ]={“12345”},*p=s,则下列表达式中不正确的是()。

A、p+1

B、*(s+2)

C、P=“abcd”

D、*S=”ABC”

2、设有下列定义

static int x,*p=&x,*q;

q=p;scanf(“%d,%d”,p,q);

若输入“3,4”,则x的值为()A、3 B、4 C、0 D、无法确定3、以下程序的运行结果是:A、6 B、6789 C、‘6’ D、789

include

main()

{char b[10]={'1','2','3','4','5','6','7','8','9','\0'},*p=b;

int k;

k=8;p=b+k;

printf("%s\n",p-3);}

4、有以下程序的输出结果是()

main()

{int v[]={1,3,5,7,2,4,6,8};

int I,*p;p=v;

for(i=0;i<8;i++) if(*(p+i)==i+1) printf((“%d”,*(p+i));

A、1

B、18

C、35

D、16

5、若有语句int* p,a=4;p=&a;下面均代表地址的一组选项是

A.a,p,*&a

B.&*a,&a,*p

C.*&p,*p,&a

D.&a,&*p,p

6.若有说明int* p,m=5,n;以下正确的程序段是

A.p=&n;scanf("%d",&p);

B.p=&n; scanf("%d",*p);

C.scanf("%d",&n); *p=n;

D.p=&n; *p=m;

7.下列程序的运行结果是:

swap(int *pt1,int *pt2)

{int p;

p=*pt1;*pt1=*pt2;*pt2=p;}

main()

{int a=5,b=7,*p1,*p2;

p1=&a;p2=&b;

swap(p1,p2);

printf("*p1=%d,*p2=%d\n",*p1,*p2);

printf("a=%d,b=%d\n",a,b);}

A、*p1=7,*p2=5

B、*p1=7,*p2=5

C、*p1=7,*p2=7

D、*p1=5,*p2=5 a=5,b=7 a=7,b=5 a=5,b=5 a=5,b=7 (7)下列程序的运行结果是:

main()

{void swap1();

void swap2();

int a=3,b=4;

swap1(a,b);printf(“%d,%d\n”,a,b);

a=3,b=4;

swap2(&a,&b);printf(“%d,%d”,a,b);}

void swap1(x,y)

int x,y;

{int t;t=x;x=y;y=t;}

void swap2(x,y)

int *x,*y;

{int t;t=*x;*x=*y;*y=t;}

A、3,4

B、4,3

C、3 4

D、4 3

4,3 3,4 4 3 3 4

8.若有定义int a[]={2,4,5,8,10,12},*p=a;则*(p+1)的值是()*(a+5)的值是()

*p+1的值是()。已知char s1[10],*s2=”abc\0def”;则执行语句strcpy(s1,s2);之后,变量strlen(s1)的值是。若有一下定义char* s="\ta\017bc";则指针变量s与指向的字符串所占的字节数分别是()。若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是___4___. *(a+5)的值是_____12____.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0)的值是____8____.若有以下定义int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是(),*(*(a+1))的值是()。

9、若有定义“int a[9],*p=a;”,并在以后的语句中未改变p的值,不能表示a[2]地址的表达式是:。 A、p+2 B、a+2 C、a++ D、++(++p)

10.若有“char a[4]={‘A’,’\0’,’D’},*p=a,i=2,j=4;”,则下列表达式值不是1的有:

A、strlen(a);

B、j||j

C、*(p+2)

D、--i

11.以下程序的输出结果是。A、Afgh123456 B、Abfhd C、Afghd D、Afgd

#include

main()

{char *p1,*p2,ch[20]=”AbCdEfG123456”;

p1=”abcd”;p2=”efgh”;

strcpy(ch+1,p2+1);strcpy(ch+3,p1+3);

printf(“%s\n”,ch);}

12.下面程序运行结果:cde

char* s="abcde";

s+=2;

printf("%s",s);

13.下面程序把数组元素中的最小值放入a[0]中。则在if语句中条件表达式应该是 . main()

{int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,I;

for(i=0;i<10;i++,p++) if( ) *a=*p;

printf(“%d”,*a);}

A、p>a

B、*p

C、*p<*a[0]

D、*p[0]<*a[0]

14.下面程序段运行结果:

char a[]="language",*p;

p=a;

while(*p!='u')

{ printf("%c",*p-32); p++; }

(14)以下程序的输出结果是。

main()

{char c[3][4]={“asd”,”GHJ”,”78”},*p[3];

int i;

for(i=0;i<3;i++) p[i]=c[i];

for(i=0;i<3;i++) printf(“%s”,p[i]);}

A、GHJ78

B、asdGHJ78

C、asdGHJ

D、ASDGHJ78

15.以下程序段的输出结果是A) 68 B) 0 C) 字符D的地址D) 不确定的值

char str[]="ABCD",*p=str;

printf("%d\n",*(p+4));

16. 变量的指针,其含义是指该变量的( )。

A)值 B)地址 C)名 D)一个标志

17. .已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) (17) 设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( )。A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 18. 下面判断正确的是。

A)char *a=”china”; 等价于 char *a; *a=”china” ;

B)char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;}

C)char *s=”china”; 等价于 char *s; s=”china” ;

D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ;

(18) 以下说明不正确的是。

A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”; C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”; 19. 已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结( )。

void print_value(int *x)

{ printf(“%d\n”,++*x); }

A)23 B)24 C)25 D)26

(19)若有以下定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是。

20. 若有说明:int i,j=9,*p1=&j;则与i=j;等价的语句是:

A、i=*p1

B、*p1=*&j

C、i=&j

D、i=**p1

21. 若有以下定义,则不能表示a数组元素的表达式是。

int a[10]={5,1,3,4,2,6,7,8,9,11},*p=a;

A、*p

B、a[10]

C、*a

D、a[p-a]

22. 写出下列程序的运行结果:A、6 B、0 C、4 D、2

main()

{int a[]={2,4,6},*pr=&a[0],x=6,y,z;

for(y=0;y<4;y++)

z=(*(pr+y)

printf(“%d\n”,z);}

23. 写出下列程序的运行结果:

main()

{static char a[]=”abcdefGH”,b[]=”abCDefGh”;

char *pt1,*pt2;int k;

pt1=a;pt2=b;

for(k=0;k<=7;k++) if(*(pt1+k)==*(pt2+k))

printf(“%c”,*(pt1+k));printf(“\n”);}

24. 设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是( )。

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制

C)p变量中存放的地址值可以改变

D)a中只能存放10个字符

25. 若已定义char s[10];则在下面表达式中不表示s[1]的地址是。

A)s+1 B)s++ C)&s[0]+1 D)&s[1]

26. 若有定义:int a[5],*p=a;则对a数组元素的正确引用是。

A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)

27. 若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是。

A)p+5 B)*a+1 C)&a+1 D)&a[0]

28. 若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用是。

A)*(*(a+i)+j) B)(a+i)[j] C)*(a+i+j) D)*(a+i)+j 29. 若有定义:int a[2][3];则对a数组的第i行第j列元素地址的正确引用是。

A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j

30.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素地址的正确引用是。

相关文档
最新文档