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

How To Return A Struct From A Function In C++

本文关键字:函数 返回 结构 C++      更新时间:2023-10-16

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

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

所以我面临的问题是指针和通过指针返回结构。

下面是代码:

#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 或 ,值就会混乱并出现乱码值。

那么这里可能出了什么问题呢?

重要的是我使用结构,也请根据代码进行指导。

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

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

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

看起来像这条线

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

在本地向函数声明数组 D CALC()

您将指向该数组的指针传递回 main 函数,但该数组被标记为免费游戏,以便在函数结束时覆盖。你在程序中做的事情越多,内存中的这个位置被覆盖的可能性就越大,尽管很难说什么时候会发生。因此,有时你会侥幸逃脱,有时你不会。

冒着给你建议的风险,最好在 main 中的某个地方声明D并将指向它的指针传递到函数中,或者在函数中使用 newmalloc 并将生成的指针传回。