#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位系統);