深入理解C语言 |
您所在的位置:网站首页 › c语言子函数怎么声明 › 深入理解C语言 |
结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; };结构体可以与typedef结合使用 typedef struct _Man { char name[64]; int age; }Man;另外,可以直接定义结构体变量 typedef struct _Man { char name[64]; int age; }Man1,Man2;还可以采用匿名结构体变量 typedef struct { char name[64]; int age; }Man1; 结构体指针指向结构体的指针 Man tArray; Man *pArray = NULL; pArray = &tArray; Man tArray[3]; Man *pArray = NULL; pArray = tArray; 简单的结构体做函数参数 int printMan(Man *tArray, int num) { int i = 0; for (i = 0; i Man *tArray = NULL; tArray = (Man *)malloc(num * sizeof(Man)); if (tArray == NULL) { return NULL; } return tArray; } 使用二级指针传出 int createMan(Man **tArray, int num) { (*tArray) = (Man *)malloc(num * sizeof(Man)); if (tArray == NULL) { return -1; } return 0; } createMan(&Man1, 3); 当结构体中存在指针 存在一级指针 typedef struct _Man { char name[64]; char *like; int age; }Man;此时,要注意一点,要使用结构中的指针,就需要给其分配内存空间 Man *creatMan(int num) { int i = 0; Man *tArray = NULL; tArray = (Man *)malloc(num * sizeof(Man)); if (tArray == NULL) { return NULL; } for (i = 0; i char name[64]; char *like; char **skill; int age; }Man;此处和一级指针类似,必须分配其内存 Man *createMan(int num) { int i = 0, j = 0; Man *tArray = NULL; tArray = (Man *)malloc(num * sizeof(Man)); if (tArray == NULL) { return NULL; } for (i = 0; i char **ptmp = (char **)malloc((4+1)*sizeof(char *)); for (j = 0; j return ; }在使用完毕要释放内存,此时开辟了多少内存就要释放多少内存,从内层到外层依次释放 int FreeTArray(Man *tArray, int num) { int i = 0, j = 0; if (tArray == NULL) { return -1; } for (i = 0; i continue;; } for (j = 0; j free(tmp[j]); } } free(tmp); } for (i = 0; i free(tArray[i].like); tArray[i].like = NULL; } } free(tArray); tArray = NULL; } 求结构体成员的相对偏移量 int i = 0; i = (int )&(((Man *)0)->age); printf("i:%d \n", i);其实是将首地址映射到0,求其偏移量 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |