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

本文介绍了使用C语言通过函数传递结构体的两种方法:一种是通过指向结构体的指针的指针来修改结构体;另一种是直接返回一个指向结构体的指针。这两种方法都能实现对结构体的有效操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值