题目六:
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));//10,5 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; }
这个题目初看真的吓人,但是不必慌张,对于这种比较复杂的指针题,我们需要画出它在内存中的存储,这样方便我们分析.
第一问:
第一问图:
第二问:
温馨提示:在做这道题的时候一定要注意++和--的副作用.
第三问:
第四问:
在第三问里面虽然CPP指向了C+3,但是不是++和--,所以没有副作用,不会改变在第四问还是指向C。
好了,本期的分享就到这里了,剑心谢谢各位停留浏览啦、、