关于一个C语言的笔试题(数组+指针)

来源:互联网 发布:ug8.5车削编程 编辑:程序博客网 时间:2024/04/27 22:16

今天有个朋友和我交流了一个C语言的笔试题,感觉印象比较深,故分享下~

 

void test(void)

{

     char arr[][5];

     char *str;

     int i;

 

      str++ = arr;

      i = str - arr;

 

      //printf("%d",i);

}

 

问:i的值是多少?

 

这个题目看是很简单:就是str++后str移动的长度~

由于str指向的是char,故移动一个字节~

 

但是这个看似简单的题目却暗藏杀机,呵呵~

首先:

      定义数组时,数组的长度必须是固定的,要是没有完全显示的指出,

      则必须有初始化值,编译器会自动算出来缺失的那一项的长度。

     

其次:(str++ = arr;)这个表达式也有问题,因为str++并不是一个左值

 

感悟:这两个问题点给那个兄弟说了后,他恍然大悟,这些知识点都知道,

         也并不是多么深奥的东西,但是在就是在面试没有反应过来~

        

         做程序员做的久了,关注的东西也由小到大,由知识点到程序流程,

         由流程到程序架构,由架构到系统,旁边还要挂个协议,呵呵~确实够乱的~

         反而把自己搞的不懂得如何表达了~明明知道的东西到了关键时刻就是表达不出来~

         自己也是深有体会~

 

         另外也劝了兄弟(也是在提醒自己),面试时一定要淡定,否则回来就得蛋疼~