指针的加减操作
#include <stdio.h> int main() { //测试指向结构体的指针自减后地址的变化 typedef struct Student { int id; char name[10]; int score; }stu; stu a = { 1, "xiaoming", 33 }; printf("结构体的大小为%d\n", sizeof(a)); stu *p = &a; printf("指针p的地址为%d\n", p); printf("指针p的大小为%d\n", sizeof(p)); printf("指针p指向结构体的大小为%d\n", sizeof(*p)); p--; printf("指针p的地址为%d\n", p); printf("指针p的大小为%d\n", sizeof(p)); //测试指向char型的指针自减后地址的变化 char b = 11; char *p1 = &b; printf("指针p1的地址为%d\n", p1); printf("指针p1的大小为%d\n", sizeof(p1)); p1--; printf("指针p1的地址为%d\n", p1); printf("指针p1的大小为%d\n", sizeof(p1)); //测试二级指针自减后地址的变化 char **p2 = &p1; printf("指针p2的地址为%d\n", p2); printf("指针p2的大小为%d\n", sizeof(p2)); p2--; printf("指针p2的地址为%d\n", p2); printf("指针p2的大小为%d\n", sizeof(p2)); return 0; }
结构体的大小是20,在对指向结构体a的指针p做自减后,他的地址变化量为20;
对指向char型数据的指针做自减后,地址变化量为1;
对二级指针做自减后,地址变化量为4,因为二级指针p2指向的是p1,变化量为p1的大小(32位系统);