使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
Using functions to create and initialize an array from main in Visual Studio 2017
数组的元素没有被初始化,因为当我运行代码时,我只看到内存中的值,而不是我在向量中设置的值。你能向我解释为什么会发生这种情况,以及我将来应该怎么做才能避免这个错误吗?请忽略我的代码中的注释
#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++中的数组等内容分配内存。
相关文章:
- 如何获取在 main() 函数中构造的类的创建对象?
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- GLFW & ImGui:从 main 以外的线程创建 ImGui 控件
- 在功能中创建一个数组,然后将其返回到main()
- 尝试在dll main中创建线程
- 是否可以从创建其创建的Main()之外的公共类成员访问公共类成员
- C++ - 在 main() 方法内的类实例中创建一个线程并调用 Sleep()
- 我需要创建一个函数在用户下打印"=",但由于变量是使用 main() 声明的,因此函数看不到参数
- 构造函数在 main 中调用,但对象未正确创建
- 无法在Main之外创建2个功能
- 当结构定义在头文件中时,如何在main()中创建结构数组
- 我想在我的main中为下面的代码创建一个对象..那么我该怎么做呢
- main () 是使用自动变量创建的,如果是这样,它的目的是什么?
- C++当我们创建对象时,构造函数会初始化,但是如果我想再次重新初始化对象,请在 main 的某个时候说该怎么做
- 如果文件在构造函数中不存在,则抛出异常,并在 main() 中创建对象时尝试/捕获它,如果好 - 开始使用该对象
- 创建一个函数来匹配 main 中的字符串
- 尝试创建重载 + 运算符时在 main 函数中写什么
- 对于我的C ++项目,我在Eclipse中创建了子文件夹,如何将其包含在main中
- Qt qtcpserver只有在main函数中创建时才工作
- 无法在函数 main() 中创建抽象类的指针