二级指针的使用

来源:互联网 发布:深圳创意软件 编辑:程序博客网 时间:2024/05/15 01:08

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


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;}
0 0