会计考友 发表于 2012-8-2 09:08:23

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

1.设有代码"int(*ptr);”,其中的ptr是( )
  ①10个指向整型变量的指针
  ②指向10个整型变量的函数指针
  ③一个指向具有10个元素的一维数组的指针
  ④具有10个指针元素的一维数组
  2.若有以下定义,则数值为4的表达式是( )
  int w={{0,1},{2,4},{5,8}},(* p)= W;
  ①*w+l
  ②p++,*(p+1)
  ③w
  ④p
  【解】代码“int(*ptr);”的分析过程是,因圆括号,括号内的ptr先与字符*结合,字符*修饰标识符ptr是一种指针;接着与后面的一对方括号结合,表示是这样的一种指针,是指向一维数组的;再有方括号中的10,说明这种数组有10个元素。至此,ptr是指向含10个元素的
  一维数组的指针。最后,是最前面的int,表示数组元素是int类型的。所以,ptr是一个指向具有10个int型元素的一维数组的指针。所以解答是③。另外,要是①,10个指向整型变量的指针,就是一个指针数组,上述代码应写成“int *ptr;”,即ptr是一个有10个指向整型变量的数组。要是②,返回值是指向10个整型变量的函数的指针,上述代码应写成“int(*(*ptr)());”,即ptr是指针,指向一种函数,函数的返回值又是一种指针,指向10个元素的数组,数组的元素是整型的。下面的代码是这样的函数指针和函数的例子:
  # include
  int a[]={{1,2,3,4,5,6,7,8,9,0} ,{0,1,2,3,4,5,6,7,8,9} };
  int(*(*ptr)(int));
  int(*f( int n))
  {return a+n;
  }
  void main()
  { int(*p),*q;
  ptr=f;/*让ptr指向函数f*/
  P=(*ptr)(0);
  q=*p;
  printf("%d\n", *p);
  P=(*ptr)(l);
  q=*p;
  printf("%d\n", *q);
  }
  在上述代码中,函数有一个int型的形参。要是④,其意义与①相同,上述代码应写成“int* ptr;”,即 ptr是一个有10个元素的数组,数组元素是指向整型变量的指针。
  【解】二维数组定义有多种赋初值的办法,问题给出的代码是按行给数组的部分元素赋初值。它们分别是w=0.w=1、w=2.w=4,w=5,w=8。根据约定,未指定初值的元素自动置全0值。指针变量p是一个指向具有四个int型元素的一维数组的指针,定义时的初值使它指向数组W的第一行。①的代码,*w+1中的W是指向 w的指针,*w 就是w,其值是2,*w+l的值是3。②的代码是逗号表达式,“p++,*(p+1)”先使p指向数组w的第二行,*(p+l)中的p+l是指向数组w的第三行,*(p+1)是指针值,指向数组w的第三行的第一个元素,即&w. ③的代码w引用数组W第三行的第三列元素,其值是0。④的代码p引用数组W第二行的第二列元素w,其值是 4。所以解答是@
页: [1]
查看完整版本: 2012年软件水平考试软件设计师课后练习(7)