如何从C ++中的函数返回结构

时间:2012-11-19 20:20:24

标签: c++ pointers loops struct

所以我通过搜索这个网站彻底浏览了这些主题,但我找不到可以帮助我的东西。

我正在为我的朋友做一个任务,让我告诉你,自从我使用C ++以来已经有一年或更长时间了。

所以我面临的问题是使用指针并通过指针返回struct。

以下是以下代码:

#include <stdio.h>
#include <conio.h>
#include <iostream.h>

    struct student
   {
    int SUB[3];
   };

   struct AVGPCT
   {
    float avg;
      float pct;
   };


AVGPCT* CALC(student *A)
{
   int x,y;
    AVGPCT D[5]={0.0,0.0,0.0,0.0,0.0};

   for(x=0;x<5;x++)
   {
    for(y=0;y<3;y++)
      {
        D[x].avg+=A[x].SUB[y];
         D[x].pct+=A[x].SUB[y];
      }
   }

   for(x=0;x<5;x++)
   {
    D[x].avg/=2;
      D[x].pct/=300;
   }
   return (D);
}

void main(void)
{
   int i,j;
   student S[5];
   AVGPCT *V;

   for(i=0;i<5;i++)
   {
    for(j=0;j<3;j++)
      {
        cout << "Enter Marks Of Subject[" << (j+1) << "] Of Student [" << (i+1) <<"] [Max=100]:";
        cin >> S[i].SUB[j];
      }
   }

   V = CALC(S);
   cout << "Average Number Of Student [1]: " << V->avg;
   cout << (*V).pct;

   getch();
}

现在的问题是,它让我很难从该位置检索正确的值。

我正在尝试用V ++增加指针。有趣的是,如果我使用以下是正确打印值:

cout << V->avg;
cout << V->pct;
V++;
cout << V->avg;
cout << V->pct;

等等。但是如果我使用循环或甚至写一行或使用endl或\ n,则值会混乱并出现乱码值。

那么这里可能出现什么问题?

重要的是我使用struct并且还请根据代码进行指导。

2 个答案:

答案 0 :(得分:4)

返回指向堆栈上数据的指针不起作用。改为使用std:vector<AVGPCT>并按值返回,而不是通过指针返回。与Java或C#不同,C ++基于值而不是指针。

C ++不允许从void返回main()

根据C ++标准,标题<iostream.h>不存在。标准标题为<iostream>

答案 1 :(得分:2)

看起来像这一行

AVGPCT D[5]={0.0,0.0,0.0,0.0,0.0};

将数组D本地声明为函数CALC()

您将指向该数组的指针传递回main函数,但是当该函数结束时,该数组被标记为免费游戏以进行覆盖。您在程序中执行的操作越多,内存中被覆盖的位置就越有可能被覆盖,但很难说何时会发生这种情况。因此,有时你会侥幸逃脱,有时则不会。

冒着给你建议的风险,最好在main中的某处声明D并将指针传递给函数或在函数内部使用newmalloc并将结果指针传回。