解剖几个有点难度的C笔试题
昨天写的那个面试题,今天在群里讨论,有个同学加工了下,变成了新的题目,写出来大家一起看看。
#include <stdio.h>
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 <stdio.h>int main()
{int a[5]={1,2,3,4,5};printf("%d\n",*((int*)(&a+1)-2));getchar();return 0;
}
求上面的代码输出,这个题目和上面的题目是一样的,对指针操作一定要搞清楚指针的类型,因为指针类型可以不断改变的。
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~