前言:
😀 为了验证自己对指针的掌握,在牛客网上找到了几道面试题觉得蛮经典,分享给大家。
😁同时给大家推荐一个超好用的刷题网站,上面涵盖了几乎所有大厂的面试题,超好用,很值得推荐
🎉第一题:
int main() { int a[5] = {1,2,3,4,5}; int* ptr = (int*)(&a + 1); printf("%d %d",*(a+1),*(ptr-1)); return 0; }
解析图:
结果:
🎉第二题:
int main() { int a[3][2] = { (0,1),(2,3),(4,5) };//该表达式为逗号表达式,初始化仅仅放进去了1,3,5 int* p; p = a[0]; printf("%d",p[0]); return 0; }
解析:
由于数组a中的内容为,逗号表达式,所以,数组a初始化内容为1,3,5
结果:
🎉第三题:
int main() { int a[5][5]; int(*p)[4]; p = a; printf("%p %d\n",&p[4][2]-&a[4][2],&p[4][2]-&a[4][2]);//低地址-高地址,得出两个负值 return 0; }
解析:
结果:
🎉第四题:
int main() { int aa[2][5] = {1,2,3,4,5,6,7,8,9,10}; int* ptr1 = (int*)(&aa+1); int* ptr2 = (int*)(*(aa+1)); printf("%d %d",*(ptr1-1),*(ptr2-1)); return 0; }
解析:
答案:
🎉第五题:
int main() { char* a[] = {"work","at","alibaba"}; char** pa = a; pa++; printf("%s\n",*pa); return 0; }
解析:
答案:
🎉第六题:
int main() { char* c[] = {"enter","new","point","first"}; char** cp[] = {c+3,c+2,c+1,c}; char*** cpp = cp; printf("%s\n",**++cpp); printf("%s\n",*--*++cpp+3); printf("%s\n",*cpp[-2]+3); printf("%s\n",cpp[-1][-1]+1); return 0; }
第一道输出:Point
第二道输出:
第三道输出:
第四道输出: