【问题标题】:why do you have to pass dynamically allocated arrays from main to functions in c++?为什么必须将动态分配的数组从 main 传递给 c++ 中的函数?
【发布时间】:2019-10-04 06:50:51
【问题描述】:

我刚刚开始学习编程,如果这是一个愚蠢的问题,请多多包涵:

为什么我们必须将动态分配的数组从 main 传递给 function?例如,在python中我认为没有必要对吗?那么为什么我们用 C++ 来做呢?为什么函数不能直接访问数组?

在下面的代码中,如果我不将arr_ptr[] 作为参数传递给函数,它就不起作用。我想知道为什么会这样。既然数组是动态分配的,为什么函数不能通过指针直接访问数组呢??

#include<iostream>
using namespace std;

//function sums the values in array
double sumArray(double arr_ptr[],int size)
{   double sum=0.0;
    for (int i=0;i<size;i++)
    {
        sum=sum+arr_ptr[i];
    }

    return sum;
}


int main()
{
    int num_of_vals=0;
    cout<<"Enter number of values to be summed: ";
    cin>>num_of_vals;
    double* arr_ptr=NULL; //creates double ptr
    arr_ptr= new double[num_of_vals]; //dyn array

    for (int i=0;i<num_of_vals;i++)
        {   cout<<"enter value #"<<i<<" out of " <<num_of_vals-1<<" to be 
             summed:";
            cin>>arr_ptr[i];
        }
    int sum=sumArray(arr_ptr,num_of_vals);
    cout<<"sum of values is:"<<sum<<endl;
    delete[] arr_ptr;
    return 0;
}

【问题讨论】:

  • 可以让函数访问调用函数的本地数组(例如main)。你想要一个例子吗?
  • 您能否提供一个编码示例来说明您在每种语言中的含义?因为我真的不认为我明白你在问什么。
  • 如果你问为什么范围很重要,你会在尝试维护一个所有变量都声明为全局变量的中型项目时遇到各种各样的痛苦(我相信你正在谈论的就是这个。)
  • 您可以在全局时间创建动态分配的变量,但它会变得复杂。 stackoverflow.com/questions/33492546/…
  • 在 python 中使用全局变量也是不好的做法!如果您愿意,您也可以在 C++ 中做坏事 :-) 顺便说一句:您的代码看起来完全像 C!您将数据与函数分开。在 C++ 中,您可以使用类和对象来阐明从数据到方法的关系。如果您从面向对象编程开始,您会看到参数传递的数量会自动减少。我建议您阅读 C++ 初学者书籍!处理原始数组也不是 C++ 风格!

标签: c++


【解决方案1】:

简短的回答:你不知道。您始终可以使用全局变量。

话虽这么说:globals are evil。这通常被认为是一种不好的做法,而且经常是一种懒惰的做法。

通常指导 C++ 开发的东西允许它用于大型项目,从而缩小可见性和责任感。一个主要目标是创建class invariants。使用 Python 很难保证这一点。

Python 和 C++ 是适合不同工作的不同工具。

无论如何,您也应该在 Python 中将变量作为参数传递:这允许您重用代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2017-04-06
    • 2010-09-25
    • 2018-04-23
    • 2011-03-25
    相关资源
    最近更新 更多