a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 99|回复: 0

[软件设计师] 2012年软件水平考试软件设计师课后练习(7)

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
1.设有代码"int(*ptr)[10];”,其中的ptr是( )( J3 r, p: Y3 Q0 N0 [" ^, w' \" ]
  ①10个指向整型变量的指针
3 C  z6 u+ Z) a, o# x$ m  ②指向10个整型变量的函数指针
1 ^" z& {6 d. ^& t9 S  ③一个指向具有10个元素的一维数组的指针8 w, L: H- R( F, k9 x+ ?3 a
  ④具有10个指针元素的一维数组
9 }. q& Y3 H3 ?3 |; d6 N' M  2.若有以下定义,则数值为4的表达式是( ): f* q5 H  D, J
  int w[3][4]={{0,1},{2,4},{5,8}},(* p)[4]= W;+ C. N( o* A0 t/ Y4 T
  ①*w[1]+l
, `  u( V" j: y8 J$ }# ]& Y8 ]  ②p++,*(p+1)
% @6 d6 Z% V* I  ③w[2][2]9 r/ A. n! f, I8 E
  ④p[1][1]) K# j: H& G2 K% \6 c/ W: |
  【解】代码“int(*ptr)[10];”的分析过程是,因圆括号,括号内的ptr先与字符*结合,字符*修饰标识符ptr是一种指针;接着与后面的一对方括号结合,表示是这样的一种指针,是指向一维数组的;再有方括号中的10,说明这种数组有10个元素。至此,ptr是指向含10个元素的4 X0 s; H7 R2 o1 Y$ g3 y9 w' K
  一维数组的指针。最后,是最前面的int,表示数组元素是int类型的。所以,ptr是一个指向具有10个int型元素的一维数组的指针。所以解答是③。另外,要是①,10个指向整型变量的指针,就是一个指针数组,上述代码应写成“int *ptr[10];”,即ptr是一个有10个指向整型变量的数组。要是②,返回值是指向10个整型变量的函数的指针,上述代码应写成“int(*(*ptr)())[10];”,即ptr是指针,指向一种函数,函数的返回值又是一种指针,指向10个元素的数组,数组的元素是整型的。下面的代码是这样的函数指针和函数的例子:
& ^' d- D/ v. W; L+ p  # include) K. v- {' U8 i. v# k
  int a[][10]={{1,2,3,4,5,6,7,8,9,0} ,{0,1,2,3,4,5,6,7,8,9} };
+ {7 ]6 T5 f: V- K, N/ K  int(*(*ptr)(int))[10];
& Q) K0 [/ \" E( Q  }: P) u  int(*f( int n))[10]
; F* X+ w7 ~7 R& A# D, {7 Y% P* F  {return a+n;
( I2 ^8 u7 @& j2 Y1 s- i- G  }4 u2 J1 j3 d7 Z" V/ H% O
  void main()2 Q. s- A% U: d* t
  { int(*p)[10],*q;
& s" j+ _) y+ |3 Y8 ^: `  M1 ]! }  ptr=f;/*让ptr指向函数f*/6 p/ f  l! x0 n' }3 J2 v* T
  P=(*ptr)(0);
, m. [( I" y8 ?  J  q=*p;5 P, p. I5 s/ i/ M4 ?
  printf("%d\n", *p);  o) N, {* J' i5 x1 ]% O# _
  P=(*ptr)(l);
+ u0 B4 ~$ e$ ]3 H0 F8 q  q=*p;
2 v2 U# `( ~, W/ B  printf("%d\n", *q);6 g; v& |; U$ R6 e/ s2 `
  }; Z  ]1 W5 _: @: `9 B
  在上述代码中,函数有一个int型的形参。要是④,其意义与①相同,上述代码应写成“int* ptr[10];”,即 ptr是一个有10个元素的数组,数组元素是指向整型变量的指针。# Q: A5 f2 J4 g& @3 Y7 M
  【解】二维数组定义有多种赋初值的办法,问题给出的代码是按行给数组的部分元素赋初值。它们分别是w[0][0]=0.w[0][1]=1、w[1][1]=2.w[1][1]=4,w[2][0]=5,w[2][1]=8。根据约定,未指定初值的元素自动置全0值。指针变量p是一个指向具有四个int型元素的一维数组的指针,定义时的初值使它指向数组W的第一行。①的代码,*w[1]+1中的W[l]是指向 w[l][0]的指针,*w[1] 就是w[1][0],其值是2,*w[1]+l的值是3。②的代码是逗号表达式,“p++,*(p+1)”先使p指向数组w的第二行,*(p+l)中的p+l是指向数组w的第三行,*(p+1)是指针值,指向数组w的第三行的第一个元素,即&w[2][0]. ③的代码w[2][2]引用数组W第三行的第三列元素,其值是0。④的代码p[1][l]引用数组W第二行的第二列元素w[1][1],其值是 4。所以解答是@
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-8 05:34 , Processed in 0.336994 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表