这个问题其实困扰我很久了,我问很多人"NULL"是什么?有啥用?
大多数人的回答是:"NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。"
今天碰到一个C语言的笔试题,还是一道不错的题~~~
- #include
- void fun(int *node)
- {
- static int N=100;
- node=&N;
- }
- int main()
- {
- int *node=NULL;
- int a=0;
- fun(node);
- a=*node;
- printf("%d\n",a);
-
- return 0;
- }
请回答,以上这题的输出结果啥?
从结果中,这题可以区别出对C语言掌握的几个程度。那结果是:100?0?段错误退出?哪一句导致的?为什么?
认为是第一个结果人其实是被static这个关键词欺骗的,但是static是对N的修饰,表示对N的改变不会在fun函数的‘}’之后被释放掉~~~还有一个点就是:C语言的函数永远是值传递(除了数组,呵呵~~~),所以你想改变指针的指向(地址值),就必须传递指针的指针,除非你用return~~~
认为是第二个结果的人掌握了第一个结果的点,并且知道在C语言里是那样定义NULL的:
- #undef NULL
- #if defined(__cplusplus)
- #define NULL 0
- #else
- #define NULL ((void *)0)
- #endif
但是gcc下发现却是段错误退出了~~~
问题在这句:
NULL是个好东西,给一出生的指针一个安分的家~~~
ps:我一开始就以为是0,功力不深啊~~~修炼,修炼~~~
To Be Continued~~~
原文地址:
阅读(842) | 评论(0) | 转发(0) |