T6.
1. 2. int main() 3. { 4. int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 5. int *ptr1 = (int *)(&aa + 1); 6. int *ptr2 = (int *)(*(aa + 1)); 7. printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1)); 8. return 0; 9. } 10. 11.
这题和前面的题类似,我们要学会画图解决这类问题;
所以:
答案:10,5
T7.
1. #include <stdio.h> 2. int main() 3. { 4. char *a[] = {"work","at","alibaba"}; 5. char**pa = a; 6. pa++; 7. printf("%s\n", *pa); 8. return 0; 9. }
看到 "alibaba",应该就知道这题曾经是阿里巴巴的笔试题了;
a 是一个指针数组,其中存放了3个 char* 类型的元素,所以要使用 a 的地址,应需要一个二级指针,详情如上图;
答案:at
T8.
1. int main() 2. { 3. char *c[] = {"ENTER","NEW","POINT","FIRST"}; 4. char**cp[] = {c+3,c+2,c+1,c}; 5. char***cpp = cp; 6. printf("%s\n", **++cpp); 7. printf("%s\n", *--*++cpp+3); 8. printf("%s\n", *cpp[-2]+3); 9. return 0; 10. }
这题是最有难度的一题了,遇到这种题目先不要慌,画图是最好的解决方法;
原始图:
第一个 printf :请看黄色箭头:
注意现在的 cpp 指向的是 c+2;
第二个 printf :请看黑色箭头:
第三个 printf :
*cpp[-2] 可以写成 **(cpp-2), 具体请看紫色箭头:
答案:POINT
ER
ST
打印结果:
🙂😀关于指针的题目到此就全部结束了,如有错误或是建议,欢迎小伙伴们提出;
🥰🤩如果认为本文还不错的话,不要忘了支持博主哦;
😆😁你们的支持是我更新的最大动力;
😸🐱谢谢你的阅读;