笔试题资源整理(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(x,y);
首先要明白它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受。
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 }
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才能顺利执行。