zoukankan      html  css  js  c++  java
  • (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);
    }
    

      

  • 相关阅读:
    数据库表分区
    将对象序列化成XML字符串
    [邀月博客] SQL Server 2008中SQL增强之二:Top新用途
    多线程:子线程执行过程中调用主线程
    Jquery版文字闪烁
    金马自定义对联
    清除数据
    QQ、微信、QQ浏览器UserAgent
    jump.html域名跳转javascript版
    注册页面位置调整
  • 原文地址:https://www.cnblogs.com/fdyang/p/6572880.html
Copyright © 2011-2022 走看看