每天被面试虐一点点(三) int (*(*F)(int, int))(int)

   1.定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?

 int (*(*F)(int, int))(int)  


首先,一个函数指针,指向的函数有两个int形参,这个就是(*F)(int, int),这返回的是一个指针
返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数;把上面的结果当成一个指针,相当于再做一次上面的步骤,所以结果为:int (* (*F)(int, int))(int)

  2.在c++中,

   

const int i = 0; 
int *j = (int *) &i; 
*j = 1; 
printf("%d,%d", i, *j)



输出是多少?

const修饰的常量值具有不可变性,c++编译器通常会对该变量做优化处理,在编译时变量i的值为已知的,编译器直接将printf输出的变量i替换为0。尽管如此,编译器仍然会为变量i分配存储空间,通过修改内存的hack方式将变量i在内存中的值修改后并不影响printf的输出。
如果将i更改为volatile const int类型的,编译器就不会对变量i做优化,printf输出的结果就为1。

其实对于这个答案,我的linux下的centos做出来的答案是1,1



3.声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是
int (*(*p)[10])(int *)


先看未定义标识符p,p的左边是*,*p表示一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,消释数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断( *(*p)[10])是一个函数指针,该函数的参数是int*,返回值是int。

参考  : http://blog.csdn.net/code_crash/article/details/4854965 点击打开链接

4.有以下表达式:
int a=248, b=4;
int const c=21;
const int *d=&a; 
int *const e=&b;
int const * const f =&a; 
请问下列表达式哪些会被编译器禁止?
A *c=32
B *d=43
C  e=&a
D  f=0x321f
E  d=&b
F  *e=34


int const c= 21 //变量c的值不能改变
const int *d=&a;  //指针变量d指向的值不能改变
int * const e=&b;  //指针的指向不能改变
int const *f const =&a;  //指针不能改变,指针指向的值也不能改变。

5 请看一下这一段C++代码,如果编译后程序在windows下运行,则一下说话正确的是?
    
char
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值