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;
}
求上面的代码输出,这个题目和上面的题目是一样的,对指针操作一定要搞清楚指针的类型,因为指针类型可以不断改变的。
评论