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

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

  

(C/C++) 用函数返回一个结构体的更多相关文章

  1. C语言中free()函数释放struct结构体中的规律

    并不是什么新鲜的事情,不过值得注意.首先我们知道,在使用struct来定义并声明一个变量时,将会自动划分出一个连续的储存空间(虽然根据某些对齐原则会出现内存间隙,但是大体上来说还是连续的)这一块连续空 ...

  2. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  3. c# 函数练习;结构体、枚举类型

       * 结构体 1.就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 注意:枚举类型和结构体都属于值类型. 2.定义的方法: struct student { public in ...

  4. NX二次开发-如何在类外面定义一个结构体

    #include <uf.h> #include <uf_obj.h> #include <uf_part.h> using namespace NXOpen; u ...

  5. 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签

    今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...

  6. Entity Framework 6 Recipes 2nd Edition(11-1)译 -> 从“模型定义”函数返回一个标量值

    第11章函数 函数提供了一个有力代码复用机制, 并且让你的代码保持简洁和易懂. 它们同样也是EF运行时能利用的数据库层代码.函数有几类: Rowset Functions, 聚合函数, Ranking ...

  7. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列

    11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...

  8. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...

  9. 【转载】让c++ 函数返回一个数组

    在c++中是不允许数组作为函数的返回值的 int [] someFunction( ); //ILLEGAL 要想实现函数返回一个数组,那返回对应数组里面类型的指针 you must return a ...

随机推荐

  1. 标准结构篇:4)EMC电磁兼容

    本章目的:电磁兼容EMC概念,及预防控制手段. 1.前言:电磁兼容EMC概述 电磁兼容是一门新兴的综合性学科.电磁兼容学科主要研究的是如何使在同一电磁环境下工作的各种电气电子设备和元器件都能正常工作, ...

  2. win 10安装应用程序提示Error 1317的解决方法

    打开windows防火墙 关闭文件夹权限访问保护

  3. CDH集群安装配置(七)--CDH组件的安装和配置

    1. Clouder Manger页面的配置 访问主节点IP:(cdh1)192.168.80.81:7180 默认用户名和密码:admin,admin 选择一个版本 选择集群的服务器(agent), ...

  4. (转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  5. Centos 7.0设置/etc/rc.local无效问题解决

    安装centos7以后按照以往习惯修改rc.local添加开机启动命令,但重启后发现无效,再次重启发现依然如故 检查系统rc.local服务运行情况 systemctl | grep "rc ...

  6. Anaconda环境变量配置问题解决

    (右键)我的电脑==>属性==>高级系统设置==>环境变量==>Path 按照下图添加: 总共4个,如果出现“此环境变量太大...”,删除或者缩短其他环境变量地址. 然后重新打 ...

  7. 【wordpress】wordpress环境的搭建

    WordPress WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 Bl ...

  8. C#使用System.xml.linq来生成XML文件

    直接看代码: /* * <?xml version="1.0" encoding="utf-8"?> * <Files Path=" ...

  9. golang基础--Array数组

    基本特性 格式: var Name [n]<type>,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组 数组长度: 长度(len)也是数 ...

  10. Angular4 step by step.1

    1.官网地址 :https://angular.cn/guide/quickstart 2.在线学习地址:https://embed.plnkr.co/?show=preview 3.效果截图哇哈哈