【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;

}

 

posted @ 2022-11-18 09:53  opensmarty  阅读(64)  评论(0编辑  收藏  举报