深入理解C语言

您所在的位置:网站首页 c语言子函数怎么声明 深入理解C语言

深入理解C语言

2023-07-23 03:22| 来源: 网络整理| 查看: 265

结构体做函数参数,在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