使用函数从 Visual Studio 2017 中的 main 创建和初始化数组

Using functions to create and initialize an array from main in Visual Studio 2017

本文关键字:创建 main 初始化 数组 中的 2017 函数 Visual Studio      更新时间:2023-10-16

数组的元素没有被初始化,因为当我运行代码时,我只看到内存中的值,而不是我在向量中设置的值。你能向我解释为什么会发生这种情况,以及我将来应该怎么做才能避免这个错误吗?请忽略我的代码中的注释

#include <iostream>
using namespace std;
//ne va crapa deoarece nu am initializat valorile vectorului, de asta cream o functie de initializare vector
void initialisingVector(int* vector, int n, int InitialValue)
{
for (int i = 0; i < n; i++)
{
vector[i] = InitialValue;
}
}
//mereu vom pune initializarea inainte de afisare
void displayingtheVector(int vector[], int n)
{
cout << endl << "The vector is:";
for (int i = 0; i < n; i++)
{
cout << vector[i] << ",";
}
}
int* creatingAndInitialisingtheVector(int* n)//nu avem nevoie de nr de elemente deoarece le ia din main;si nici de vector;
{//nu avem nevoie de nimic la parametrii, totusi punem n deoarece ne da eroare-n main, ai comentat acolo
//vom folosi in* n ca parametru deoarece n e o valoare ce se va modifica , prin urmare e transmisa prin pointer
//vom avea eroare cu expected ; ,nu are legatura cu ; problema este de la int[] ,expected an identifier
//nu o sa putem nici o data pune int[] la tipul unei functii, mereu vom pune int*, int[]---sa incercam sa uitam forma asta;
//INTOTDEAUNA int*
int vectorNou[30];
int numberElements;
int InitialValue;
std::cout << std::endl << "Number of elements:";
std::cin >> numberElements;
*n = numberElements;
std::cout << std::endl << "Initial value is:";
std::cin >> InitialValue;

initialisingVector(vectorNou, numberElements, 0);
//afisareVector(vectorNou, numarElemente); nu are sens sa o facem in fct de creare
return vectorNou;
}

int main()
{
int listaPreturi[30];
int numarProduse;
/*std::cout << std::endl<<"Numarul de produse este:";
std::cin >> numarProduse;
initializareVector(listaPreturi, numarProduse, 0);
afisareVector(listaPreturi,numarProduse);
*/
//listaPreturi=crearesiInitializareVector();//ne va trebui o variabila care sa prinda vectorul creat de functie,de asta punem listaPreturi
//vom obtine o alta eroare dupa ce egalam variabila cu functia; expression must be a modifiable lvalue==>listaPreturi e o variabila constanta, si trebuie sa fie modifiable
//dc avem o fct care inhtoarce un vector nu vom putea prinde vectorul nou intr-un alt vector deja creat static.
//il va prinde u8n vetor dinamic in schimb
int nrElements = 0;
int* vectorNew = creatingAndInitialisingtheVector(&nrElements);//functioneaza
//afisareVector(vectorNou, sizeof(vectorNou)); e periculos folosind sizeof(vectorNou) deoarece vectorNou are 4 , utilizatoru poate vrea mai multe elemente
displayingtheVector(vectorNew, nrElements);
}

我希望显示具有用户设置的值的向量,而不是内存地址。

程序具有未定义的行为,因为函数creatingAndInitialisingtheVector返回指向本地数组的指针

int vectorNou[30];

退出函数后将不活动。

似乎您应该通过以下方式再用一个参数声明该函数

size_t creatingAndInitialisingtheVector( int *a, size_t n );

并在主像中调用函数

size_t nrElements = 
creatingAndInitialisingtheVecto( listaPreturi, sizeof( listaPreturi ) / sizeof( *listaPreturi ) );

函数定义可能如下所示

size_t creatingAndInitialisingtheVector( int *a, size_t n)//nu avem nevoie de nr de elemente deoarece le ia din main;si nici de vector;
{//nu avem nevoie de nimic la parametrii, totusi punem n deoarece ne da eroare-n main, ai comentat acolo
//vom folosi in* n ca parametru deoarece n e o valoare ce se va modifica , prin urmare e transmisa prin pointer
//vom avea eroare cu expected ; ,nu are legatura cu ; problema este de la int[] ,expected an identifier
//nu o sa putem nici o data pune int[] la tipul unei functii, mereu vom pune int*, int[]---sa incercam sa uitam forma asta;
//INTOTDEAUNA int*
size_t numberElements;
int InitialValue;
std::cout << std::endl << "Number of elements:";
std::cin >> numberElements;
if ( n < numberElements ) numberElements = n;
std::cout << std::endl << "Initial value is:";
std::cin >> InitialValue;
initialisingVector( a, numberElements, InitialValue);
//afisareVector(vectorNou, numarElemente); nu are sens sa o facem in fct de creare
return numberElements;
}

在函数内部creatingAndInitialisingtheVector返回一个指向内存的指针,一旦函数返回,该指针将超出范围。内存正在为函数的作用域分配,并在返回后释放。我建议阅读范围以及如何为C++中的数组等内容分配内存。

相关文章: