方法一: 参数里含有指向指针的指针。
注意:如果函数参数里只有一个指向结构体的指针,是无法正确地返回结构体的值的。原因在于在编译的时候,会对入参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);
}
 
                    
                     
                    
                 
                    
                 

 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号