来深圳快两周了,陆陆续续去面试了几家公司,因为投的是单片机工程师,所以这几天一直在考C,做了几张试卷才发现自己的C语言真的是不扎实,还要好好修练才行,于是在深圳图书馆借了一大堆关于C方面的书,一定要好好啃啃C,一定要把C拿下!
下面这道题是昨天面试中遇到的,开始时没弄明白,今天上机试了试,又找Noheart大哥请教了一下才有所理解:
int a[] = {1,3,5,7,9,11};
int i,j,k;
int *p;
p = a;
i = *(p++)*(p++)[1];//开始没弄明白这句话是什么意思
j = *p;
k = *(p++);
printf("%d\t%d\t%d\n",i,j,k);
让写出i,j,k的值。
今天在DEV C++这个编译器中试了一下,结果是3,上网上搜了一下,也没结果,于是只有自己去试了,后来又去请教了一下Noheart大哥才有所明白,我的理解如下:
int a[] = {1,3,5,7,9,11};
int i,j,k;
int *p;
p = a;
i = *(p++)*(p++)[1];//i = *(p++)*(p++)[1]其实等效于i=(*p)*a[1]
//i = *(p++); //把上面公式拆开来看就是一个乘法 *(p++)==1
//i = (p++)[1]; // (p++)[1] == 3
j = *p;
k = *(p++);//与下面一句作比较
//k = *p++; //*(p++) 等价于 *p++
printf("%d\t%d\t%d\n",i,j,k);
不知这样理解正确否,如果哪位高手看到了,不要见笑,如果您有空可以给我讲讲,谢谢!
我的QQ是:515673876
用户330644 2011-4-29 22:15
用户371135 2010-12-13 14:33
huotingtu_505472073 2010-11-3 23:36
用户1409644 2010-7-29 16:36
用户1584993 2010-7-23 15:23