指针(地址)+1和指针(地址)的二进制表示+1完全不同
如果一个int类型的指针ip,那么ip+1指向的是计算机内存中的下一个整数,它不同于ip所指向地址的下一个内存的位置。
例如:
int a=10;
int* p=a;
假设p=0x00023;
那么p+1=0x00027,这与p的二进制表示0x00023+1指向的内容完全不同。
结构体指针+1表示什么?
结论:结构体指针+1表示对该结构体指针偏移一个结构体大小的地址。换句话说,指针加1,结果是对该指针增加1个储存单位大小的长度。
举例:
typedef struct
{
unsigned short id; // 2字节
unsigned short len; // 2字节
int addr; // 4字节
int writeaddr; // 4字节
}fifo;
int main()
{
fifo f1={1,10,0x12,0x23};
fifo* pf=&f1;
printf("pf addr:%p\n",pf);
printf("pf+1 addr:%p",pf+1);
return 0;
}
从上图可以看出,pf+1和pf的地址差0x0c,也就是结构体fifo的大小。
指针+1表示什么含义?
就是对指针偏移所指类型大小的地址。
看例子:
#include "testFunc.h"
typedef struct
{
unsigned short id; // 2字节
unsigned short len; // 2字节
int addr; // 4字节
int writeaddr; // 4字节
}fifo;
int main()
{
fifo f1={1,10,0x12,0x23};
fifo* pf=&f1;
printf("pf addr:%p\n",pf);
printf("pf+1 addr:%p\n",pf+1);
int* p;
printf("p: %p\n",p);
printf("p+1:%p\n",p+1);
unsigned short *p1;
printf("p1: %p\n",p1);
printf("p1+1:%p\n",p1+1);
return 0;
}