C++ 在c+;中,为什么必须将动态分配的数组从main传递到函数+;?

C++ 在c+;中,为什么必须将动态分配的数组从main传递到函数+;?,c++,C++,我刚刚开始学习编程,所以如果这是一个愚蠢的问题,请容忍我: 为什么我们必须将动态分配的数组从main传递到函数?例如,在python中,我认为没有必要对吗?那么为什么我们要用C++来做呢?为什么函数不能直接访问阵列 在下面的代码中,如果我没有将arr\u ptr[]作为参数传递给函数,它将不起作用。我想知道为什么会这样。既然数组是动态分配的,为什么函数不能通过指针直接访问数组 #include<iostream> using namespace std; //function su

我刚刚开始学习编程,所以如果这是一个愚蠢的问题,请容忍我:

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

在下面的代码中,如果我没有将
arr\u 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;
}

#包括
使用名称空间std;
//函数对数组中的值求和
双相乘数组(双arr_ptr[],整数大小)
{双和=0.0;

对于(inti=0;i简短回答:您不需要。您可以始终使用globals

话虽如此,这通常被认为是一种不好的做法,而且常常是一种懒惰的做法

C++中通常指导开发的东西,允许它用于巨大的项目,它可以缩小可见性和响应能力。一个主要目标是创建。这很难用Python来保证。

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


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

您可以让函数访问调用函数的本地数组(例如,
main
).你想举个例子吗?你能提供一个你在每种语言中的意思的编码例子吗?因为我真的不认为我理解你在问什么。如果你问为什么范围很重要,那么当你试图维护一个所有变量都声明为全局的中型项目时,你会学到各种各样的痛苦(这就是我所说的。)你可以在全局时间创建动态分配的变量,但是它会变得复杂。使用全局变量也是Python中的坏操作!如果你喜欢,你也可以在C++中做坏事:BTW:你的代码看起来完全像C!你的数据与函数分离。C++中你有能力使用类和对象来阐明从数据到方法的关系。如果你开始面向对象编程,你会发现参数传递的数量会自动减少。我建议你读一个初学者BO。好的C++!也处理原始数组不是C++风格!