有时候,我们需要在函数体的内部申请内存空间并初始化,然后将内部申请的存储空间交付给外部指针来引用,这时候,我们可以使用二级指针作为申请空间的函数的参数来实现。
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;
}