functii

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
vili_c++
Junior
Junior
Posts: 20
Joined: 11 Feb 2014, 23:39
Judet: Dolj

functii

Post by vili_c++ » 29 Jul 2014, 22:21

Am realizat urmatorul cod ce ar trebui sa afiseze un vector.
Va rog sa ma ajutati sa inteleg de ce nu afiseaza elementele vectorului.
Va multumesc !

Code: Select all

#include <iostream>
using namespace std;
int *pfunction(int n);

int main()
{
    int n, *q;
    cout << "\n Numarul de elemente: ";
    cin >> n;
    q = pfunction(n);
    cout << "\n Elementele vectorului sunt: ";
    for (int i=0; i<n; i++)
        cout << " " << *(q+i);
    cout << endl;
    return 0;
}

int *pfunction(int n)
{
    int *p, tab[10];
    p = &tab[0];
    for(int i=0; i<n; i++)
    {
        cout << "\n tab[" << i << "] = ";
        cin >> *(p+i);
    }
    return p;
}



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: functii

Post by Ovidiu Cucu » 30 Jul 2014, 09:09

Tabloul tab[10] e definit local in pfunction. La iesirea din scopul functiei, tab[10] este distrus iar ca mai departe programul o sa-ti afiseze "carcalaci".
Solutia este sa-l definesti in main si sa-l transmiti functiei ca parametru.

Cam asa:

Code: Select all

int main()
{
    // ...

    int tab[10];
    q = pfunction(n, tab);

    // ...
}

int *pfunction(int n, int tab[])
{
    int *p;
    p = &tab[0]; // sau mai simplu, p = tab; (numele tabloului e un pointer la primul element)
    
    // ...

    return p;
}
...sau si mai simplu, folosesti direct tab,

Code: Select all

int *pfunction(int n, int tab[])
{
    for(int i=0; i < n; i++)
    {
        cout << "\n tab[" << i << "] = ";
        cin >> *(tab + i);
    }
    return tab;
}
...sau, echivalent

Code: Select all

int *pfunction(int n, int tab[])
{
    for(int i=0; i < n; i++)
    {
        cout << "\n tab[" << i << "] = ";
        cin >> tab[i];
    }
    return tab;
}
tab este echivalent cu *(tab + i)

vili_c++
Junior
Junior
Posts: 20
Joined: 11 Feb 2014, 23:39
Judet: Dolj

Re: functii

Post by vili_c++ » 30 Jul 2014, 11:11

Multumesc de raspuns domnule Cucu !
Intre timp am si o alta varianta a codului de mai sus cu tab[10] declarat ca variabila statica.
Prezinta un dezavantaj declararea tabloului tab[10] ca variabila statica ?

Code: Select all

#include <iostream>
using namespace std;
int *pfunction(int);

int main()
{
    int n, *q;
    cout << "\n Numarul de elemente: ";
    cin >> n;
    q = pfunction(n);
    cout << "\n Elementele vectorului sunt: ";
    for (int i=0; i<n; i++)
        cout << " " << *(q+i);
    cout << endl;
    return 0;
}

int *pfunction(int n)
{
    int *p;
    static int tab[10];
    p = &tab[0];
    for(int i=0; i<n; i++)
    {
        cout << "\n tab[" << i << "] = ";
        cin >> *(p+i);
    }
    return p;
}


User avatar
MarianMMX
Junior
Junior
Posts: 16
Joined: 27 Mar 2014, 09:50
Judet: Galaţi

Re: functii

Post by MarianMMX » 30 Jul 2014, 20:05

In cazut tau, nu.
If you think C++ is not overly complicated, just what is a
protected abstract virtual base pure virtual private destructor
and when was the last time you needed one? — Tom Cargill (1990)

Post Reply