深入理解指针
例题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;
}
先画图,根据此图去理解打印的内容。
 
 对于第一个打印
 
对于第二个打印,不确定优先可以看看优先级
 
 
 对于第三个打印
 
 对于第四个打印
 
 运行输出
 
 
