解剖几个有点难度的C笔试题
昨天写的那个面试题,今天在群里讨论,有个同学加工了下,变成了新的题目,写出来大家一起看看。
#include struct node { int a;int b;int c; }; int main() { struct node s= {3,5,6}; int*pt = (int*)(&s+1); printf("%d",*(pt-2)); getchar(); return 0; }
求代码输出
&s 是一个结构体地址,也就是结构体指针,对指针的操作加1,减1,指的是加上它的类型大小,&s +1等于&s + sizeof(struct node)。
知道这个之后就比较容易得出答案了。
还有之前的题目,如果是一个数组a[5]={1,2,3,4,5},然后对数组名操作。
#include int main() { int a[5]={1,2,3,4,5}; printf("%d\n",*((int*)(&a+1)-2)); getchar(); return 0; }
求上面的代码输出,这个题目和上面的题目是一样的,对指针操作一定要搞清楚指针的类型,因为指针类型可以不断改变的。
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~