本示例中使用二级指针修改一个子类结构体中基类的内容
代码如下:
#include "stdio.h"
#include "stdlib.h"
typedef struct
{
int age;
int num;
}ST_BASE_INFO;
typedef struct
{
ST_BASE_INFO* pstInfo;
int groupNum;
}ST_ALL_BIG;
void SetAge(ST_ALL_BIG* pstBig, int age, int num)
{
ST_BASE_INFO* pstSmallInfo = (ST_BASE_INFO*)malloc(sizeof(ST_BASE_INFO));
pstSmallInfo->age = age;
pstSmallInfo->num = num;
//使用二级指针修改指针指向的内容,如果使用一级指针,修改的是指针变量的值,无法修改其指向的内容
ST_BASE_INFO** localInfo = &(pstBig->pstInfo);
(*localInfo) = pstSmallInfo;
//如果使用一级指针,把这个局部指针变量指向了我们要修改的值,但是原本指针变量指向的那块内存没有修改
//试图这样去修改,是无法修改成功的
//ST_BASE_INFO* localInfo = (pstBig->pstInfo);
//localInfo = pstSmallInfo;
}
int main(int argc, char const *argv[])
{
system("chcp 65001");
ST_ALL_BIG* pstAllInfo = (ST_ALL_BIG*)malloc(sizeof(ST_ALL_BIG));
ST_BASE_INFO* pstSmallInfo = (ST_BASE_INFO*)malloc(sizeof(ST_BASE_INFO));
pstAllInfo->pstInfo = pstSmallInfo;
pstAllInfo->groupNum = 4;
pstAllInfo->pstInfo->num = 1;
pstAllInfo->pstInfo->age = 3;
SetAge(pstAllInfo,10,5);
printf("%d\n",pstAllInfo->pstInfo->age);
printf("%d\n",pstAllInfo->pstInfo->num);
system("pause");
return 0;
}
这种二级指针的使用在链表中通常要用到,我们需要修改下一个节点中的内容,而传入的是当前节点的指针。