笔试题资源整理(2)

5. what's reflection in java

 解答:一对一、一对多、多对一的映射概念

6. How many data types can be used in swith (Java)?

 解答:int ,char,byte,short,boolean,enum(枚举)

 

7.定义:

  a).指针数组:

 解答:定义 int *p[n];

 []优先级高,先与p结合成为一个数组,再由int *说明这是一个整型指针数组。它有n个指针类型的数组元素。

p[0],p[1]...p[n-1]分别是指针变量用来存放变量地址。

  b).数组指针(也称行指针):

 

 解答:定义 int (*p)[n];

 

()优先级高,说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度为n,也可以说是p的步长。

优先级:()>[]>*

两者的区别:数组指针只是一个指针变量,指向的是一个数组(多用来指向二维数组),它占有内存中一个指针的存储空间。指针数组是多个指针变量(为避免搞混,你可以想到整型数组)占有多个指针的存储空间。

同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 

 c).函数指针:  

 解答:函数指针是指向函数的指针变量,本质是一个指针变量(联系到C#中的委托)

 int (*p) (int x);  //声明一个函数指针

 p=func;   //将func函数的首地址赋给指针p

 指向函数的指针包含了函数的地址,可以通过它来调用函数。声明的格式:类型说明符 (*函数名)(参数)

 例子:

 

void (*funcp)();
        void FileFunc(),EditFunc();

        main()
        {
            funcp=FileFunc;
            (*funcp)();
            funcp=EditFunc;
            (*funcp)();
        }

        void FileFunc()
        {
            printf(“FileFunc\n”);
        }

        void EditFunc()
        {
            printf(“EditFunc\n”);
        }

        程序输出为:
            FileFunc
            EditFunc

 

d).指针函数

 解答:指针函数是只带指针的函数,其本质是一个函数,函数返回类型是某一类型的指针,声明格式为:

类型标识符    *函数名(参数表)

   int *f(xy);

首先要明白它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受。

 

float *fun();

 

float *p;

p = fun();

由于返回的是一个地址,所以类型说明符一般都是int
    
例如:int *GetDate();
          int * aaa(int,int);

例子:

 

 1 #include<stdio.h>   
 2 int * GetDate(int wk,int dy);//指针函数的声明
 3 
 4  main()
 5  {
 6    int wk,dy;
 7    int *result;//整型指针变量
 8            do
 9             {
10                 printf("Enter week(1-5)day(1-7)\n");
11                 scanf("%d%d",&wk,&dy);
12             }
13             while(wk<1||wk>5||dy<1||dy>7);
14             result=GetDate(wk,dy);//函数返回值赋给同类型的指针变量
15             printf("%d\n",*result);
16  }
17 
18  int * GetDate(int wk,int dy)
19  {
20             static int calendar[5][7]=
21             {
22                {1,2,3,4,5,6,7},
23                {8,9,10,11,12,13,14},
24                {15,16,17,18,19,20,21},
25                {22,23,24,25,26,27,28},
26                {29,30,31,-1}
27             };
28             return &calendar[wk-1][dy-1];
29  }
View Code

 

e).指针的指针

解答:

 

指针的指针需要用到指针的地址。
        char c='A';
        char *p=&c;
        char **cp=&p;

用法举例:

 

 1 #include<stdio.h>   
 2 void FindCredit(int ** fpp);
 3 main()
 4 {
 5     int vals[]={7,6,5,-4,3,2,1,0};
 6     int *fp=vals;
 7     FindCredit(&fp);
 8     printf("%d\n",*fp);
 9 }
10 
11 void FindCredit(int ** fpp)
12   {
13       while(**fpp!=0)
14       if(**fpp<0) break;
15       else (*fpp)++;//*运算符优先级高于++运算符,所以()是必须的。
16   }

 

f).指向指针数组的指针:

难点,怎样灵活运用,例子还没弄出来。

8.Describe scope of public/private/frined/protected/protected frined

解答:

Public   公用   同一项目中任意位置的代码,引用该项目的其他项目,以及由该项目生成的任何程序集
Protected   保护   同一个类内部或从该类派生的类中访问元素。
Friend   友元   从同一程序集内部访问元素,而不能从程序集外部访问
Protected   Friend     Protected 和 Friend的联合派生类或同一程序集内,或两者皆可
Private   私有   仅可以从同一模块、类或结构内访问元素

程序集:经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行。

 

 

posted @ 2013-09-26 19:21  wj704  阅读(224)  评论(0编辑  收藏  举报