在今天以前我一直以为指针相减结果为他们的内存地址差,但其实不是:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <string.h>
typedef struct{
uint a;
uint b;
} as;
void main(){
as* a = malloc(sizeof(as)*3);
as* p = a+1;
(a+1)->a = 317;
printf("p->a=%d\n", p->a);
printf("p-a=%d\n", p-a);
printf("(char*)p-(char*)a=%d\n", (char*)p-(char*)a);
printf("(char*)(a+1)-(char*)a=%d\n", (char*)(a+1)-(char*)a);
}
p->a=317
p-a=1
(char*)p-(char*)a=8
(char*)(a+1)-(char*)a=8
是:他们的内存地址差 / 他们的类型(或强转的类型)的长度