赞
踩
#include <stdio.h> #include <stdlib.h> #include <string.h> struct student { int num; char name[64]; }; int main(int argc, char const *argv[]) { printf("先打印一下结构体大小:%d\n",sizeof(struct student)); printf("%d\n",sizeof(int)); void * node_p = (void*)malloc(sizeof(struct student)*3+sizeof(int)); printf("void*类型:node_p指向为 :%p\n",node_p); printf("void*类型:node_p+1指向为:%p\n",node_p+1); printf("void*类型:node_p+2指向为:%p\n",node_p+2); //因为node—p的类型是任意类型 所以位移一下,就往下走了一个字节 /**下面是打印结果 * node_p指向为 :0000022734076db0 node_p+1指向为:0000022734076db1 node_p+2指向为:0000022734076db2 */ //下面转换一下类型 printf("int*:node_p指向为 :%p\n",(int*)node_p); printf("int*:node_p+1指向为:%p\n",(int*)node_p+1); printf("int*:node_p+2指向为:%p\n",(int*)node_p+2); //这种情况下位移就是4个了 /** *node_p指向为 :0000023d236f6db0 *node_p+1指向为:0000023d236f6db4 *node_p+2指向为:0000023d236f6db8 * */ //然后下面我们进行一下 赋值一下int类型的个数 *((int*)node_p) = 3; //这样就把 整个内存最开始的数赋值为3了 //然后我们需要将地址偏移到int类型的数的下面去 到结构体地址开头 struct student * stu_t = (struct student *)(node_p +sizeof(int)); printf("stu_t的地址为:%p\n",stu_t); printf("stu_t+1的地址为:%p\n",stu_t+1); printf("stu_t+2的地址为:%p\n",stu_t+2); /** * stu_t的地址为: 0000021e21056db4 * stu_t+1的地址为:0000021e21056df8 e3c -df8 =0x44 也就是十进制的 68 所以对应上了 * stu_t+2的地址为:0000021e21056e3c */ //然后对剩下的学生结构体里面的内容进行赋值 printf("&stu_t[0]:%p\n",&stu_t[0]); printf("stu_t:%p\n",stu_t); /** * &stu_t[0]:00000176f6146db4 * stu_t:00000176f6146db4 */ //进行赋值 //stu[0] stu_t[0].num = 10; strcpy(stu_t[0].name,"name1"); //stu[1] (stu_t+1)->num=20; strcpy((stu_t+1)->name,"name2"); //stu[2] (stu_t+2)->num =30; strcpy((stu_t+2)->name,"name3"); printf("%s %d\n",__FILE__,__LINE__); //进行循环取值 //首先拿到int类型的num 读出结构体数组内有多少个成员 int * num_t = (int*)node_p; printf("打印一下看看拿到了没有num_t:%d\n",*num_t); //然后拿到结构体数组的首地址进行遍历打印 struct student * stu_l = (struct student *)(node_p+sizeof(int)); for(int i=0;i<3;i++) { printf("num=%d,name = %s\n",stu_l[i].num,stu_l[i].name); } /** * 打印一下看看拿到了没有num_t:3 * num=10,name = name1 * num=20,name = name2 * num=30,name = name3 */ return 0; }
以下是运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。