深入理解指针
- 其他
- 2025-08-23 13:39:01

例题1 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; }
由图知第二个打印的是-4 因为%p是直接将内存中的值当作地址打印 而-4在内存中存放的是其二进制的补码,打印以16进制形式打印 10000000000000000000000000000100 -4的原码 111111111111111111111111111111111011 -4的反码 111111111111111111111111111111111100 -4的补码 1111 1111 1111 1111 1111 1111 1111 1100 F F F F F F F C 所以第一个打印FFFFFFFC
例题2 int main() { char* a[] = { "word", "at", "alibaba" }; char** pa = a; pa++; printf("%s\n", *pa);//"at" }例题3 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; }
先画图,根据此图去理解打印的内容。 对于第一个打印
对于第二个打印,不确定优先可以看看优先级 对于第三个打印 对于第四个打印 运行输出