#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct test { int m; char* s; short p; char a[2]; short q[4]; }*p; int main() { p = (struct test*)0x100000; printf("%p\n", p + 0x1); //0x00 10 00 14 ->14等于十进制的20 即p原类型是一个结构体类型其大小为20byte所以当+1就会直接加20 printf("%p\n", (unsigned long)p + 0x1); //此处将p强转成了无符号的长整形既然是整形就直接+1即可 printf("%p\n", (unsigned int *)p + 0x1); //此处转化成了无符号int * 所以其大小又变成了4所以+1就是+4 return 0; }
所以对于指针的加1问题,总结来说有:
- 清楚其类型
- +1都是按照类型来加的,其是类型,就加上该类型的大小
- 如果是整形,就直接相加即可