今天有个朋友和我交流了一个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++并不是一个左值
感悟:这两个问题点给那个兄弟说了后,他恍然大悟,这些知识点都知道,
也并不是多么深奥的东西,但是在就是在面试没有反应过来~
做程序员做的久了,关注的东西也由小到大,由知识点到程序流程,
由流程到程序架构,由架构到系统,旁边还要挂个协议,呵呵~确实够乱的~
反而把自己搞的不懂得如何表达了~明明知道的东西到了关键时刻就是表达不出来~
自己也是深有体会~
另外也劝了兄弟(也是在提醒自己),面试时一定要淡定,否则回来就得蛋疼~