(C/C++) 用函数返回一个结构体

方法一: 参数里含有指向指针的指针。

注意:如果函数参数里只有一个指向结构体的指针,是无法正确地返回结构体的值的。原因在于在编译的时候,会对入参p产生一个备份_p.

参考此文:http://www.cnblogs.com/kaituorensheng/p/3246900.html

方法二:返回一个指向结构体的函数指针

#include "stdafx.h"
#include "stdlib.h"
#include "stdint.h"

typedef struct Vector3
{
	int X;
	int Y;
	int Z;
} Vector3;

typedef struct Config
{
	int mode; 
	Vector3 *pData; 
} Config; 



void GetConfigData(Config** pConfig)
{
	Config *cfg = (Config *)malloc(sizeof(Config)); 
	cfg->mode = 1;
	cfg->pData = (Vector3 *)malloc(sizeof(Vector3));
	cfg->pData->X = 2;
	cfg->pData->Y = 4;
	cfg->pData->Z = 6;
	*pConfig = cfg; 
}

Config *GetConfigData1()
{
	Config *cfg = (Config *)malloc(sizeof(Config));
	cfg->mode = 3;
	cfg->pData = (Vector3 *)malloc(sizeof(Vector3));
	cfg->pData->X = 5;
	cfg->pData->Y = 7;
	cfg->pData->Z = 9;
	return cfg; 
}

int _tmain(int argc, _TCHAR* argv[])
{
	Config *cfg1 = (Config *)malloc(sizeof(Config));
	cfg1->pData = (Vector3 *)malloc(sizeof(Vector3));
	GetConfigData(&cfg1); 
	printf("cfg1:%d, %d, %d, %d", cfg1->mode, cfg1->pData->X, cfg1->pData->Y, cfg1->pData -> Z); 
	cfg1 = GetConfigData1(); 
	printf("cfg1:%d, %d, %d, %d", cfg1->mode, cfg1->pData->X, cfg1->pData->Y, cfg1->pData->Z);
	free(cfg1);
}

  

原文地址:https://www.cnblogs.com/fdyang/p/6572880.html