【c&c++】二级指针的使用
有时候,我们需要在函数体的内部申请内存空间并初始化,然后将内部申请的存储空间交付给外部指针来引用,这时候,我们可以使用二级指针作为申请空间的函数的参数来实现。
main.c文件:
#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma pack(push,1) typedef struct userInfo{ char a; //1字节 int b; //4字节 short c;//2字节 char d; //1字节 char e; //1字节 } YF_userInfo; #pragma pack(pop) void addUserInfo(YF_userInfo **info); int main(int argc, const char * argv[]) { YF_userInfo *userInfo = NULL; addUserInfo(&userInfo); printf("change a:%d\n",userInfo->a); printf("change b:%d\n",userInfo->b); printf("change c:%d\n",userInfo->c); printf("change d:%d\n",userInfo->d); printf("change e:%d\n",userInfo->e); free(userInfo); return 0; } /** * 注意:这里必须使用二级指针,如果使用一级指针的话,同级指针之间赋值 * 是以值传递的方式传递,这样会导致外部传入的指针无法获得内部申请的内存空间, * 也就无法使用内部申请的空间内容。 */ void addUserInfo(YF_userInfo **info){ *info = (YF_userInfo *)malloc(sizeof(YF_userInfo)); memset(*info,0,sizeof(YF_userInfo)); YF_userInfo *userInfo = *info; userInfo->a = 1; userInfo->b = 10; userInfo->c = 5; userInfo->d = 9; userInfo->e = 3; }