直接指向结构体第一个成员就可以了,为什么还一级偏移和二级偏移还有数组数据结构呢?
这个一级和二级和数组结构偏移是怎么来的,为什么要这样写?能写个代码吗我运行调试理解下。
#include <stdio.h>
struct node {
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
};
struct node *p; // 申明一个全局指针
int main() {
struct node stu; //定义一个结构体变量,类型是node结构体
p = &stu; // 让全局指针p指向 结构体变量stu的首地址
printf("stu address = %p, p address = %p\n", &stu, p); //打印stu的地址和p指向的地址,地址一样则指向了同一块区域
printf("p->name address = %p\n", p->name); //一级偏移,通过全局指针p访问结构体stu中name成员,打印p指向的地址
printf("p->name[8] address = %p\n", &(p->name[1])); // 二级偏移,通过全局指针p访问结构体stu中name成员中下标为1的字符,打印p->name[1]的地址
int arr[1000]; // 定义一个数组,此时arr的地址就是基址, arr+4中4就是偏移
printf("arr address = %p\n", arr); //打印arr的地址
printf("arr + 4 address = %p, arr[4] address = %p\n", arr + 4, &arr[4]); // 此时arr+4就是访问arr[4]的地址,可以看到两个地址是相等的
return 0;
}